Non mi inserisce l'ordine pendente
Forums › ProRealTime forum Italiano › Supporto ProOrder › Non mi inserisce l'ordine pendente
- This topic has 79 replies, 2 voices, and was last updated 4 years ago by robertogozzi.
-
-
04/09/2020 at 9:14 PM #125494
Buona sera.
Con il codice che allego ho un il seguente problema. Il programma piazza il pendente correttamente, se il pendente non entra a mercato, si cancella al termine della candela. Nel caso invece il pendente entri al mercato, al termine della candela viene correttamente chiuso, ma il pendente alla candela successiva non viene piazzato.
Chiedo cortesemente aiuto per risolvere la questione.
Buona serata.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687DEFPARAM CumulateOrders = FalseDEFPARAM PreLoadBars = 10000////////////////////////////////////////////////////////////////////////////////////////ONCE Capitale = 4196ONCE LotNumber = 1ONCE MinLots = 1ONCE SpreadEntrata = 10 * pipsizeONCE SpreadPendente = 10 * pipsize//ONCE MargineEntrata = 1 * pipsizeONCE MarginePendente = 1 * pipsizeONCE StopMinimo = 40 * pipsizeONCE StopMassimo = 200 * pipsizeONCE LimiteMaxBarra = 450 * pipsize//NumeroBarra = 0//OrarioChiusura = 0TradingDay = OpenDayOfWeek >= 0 AND OpenDayOfWeek <= 5 //trade only Mon. to Fri.TradingOrario = CurrentTime <=210000 AND CurrentTime>=000000//Testo se la barra è di alta volatilitàAltaVolatilita = range > LimiteMaxBarra//Definisco il tipo barraIF (close > (high + low) / 2) AND NOT AltaVolatilita THENTipoBarra = 1ELSIF (close < (high + low) /2) AND NOT AltaVolatilita THENTipoBarra = 2ELSIF (close > (high + low) / 2) AND AltaVolatilita THENTipoBarra = 3ELSIF (close > (high + low) / 2) AND AltaVolatilita AND (high - close) > StopMassimo THENTipoBarra = 4ELSIF (close < (high + low) /2) AND AltaVolatilita AND (close - low) < StopMassimo THENTipoBArra = 5ELSIF (close < (high + low) /2) AND AltaVolatilita AND (close - low) > StopMassimo THENTipoBarra = 6ENDIF// Chiude tutte le posizioni alla chiusura della barraIF (Barindex -Tradeindex) >= 1 THENIF ONMARKET THENSELL AT MARKET //exit LONG trades, if anyEXITSHORT AT MARKET //exit SHORT trades, if anyENDIFENDIF//Credo dica il profitto è dato dal capitale + il ricavato dal programmaMyProfit = Capitale + StrategyProfit//Credo centri qualche cosa con l'aumento della size al cambio del meseIF Month <> Month[1] THENLotNumber = max(MinLots, (MyProfit / Capitale))ENDIFIF TipoBarra = 1 AND TradingDay AND TradingOrario THEN//PASSO = 1StopEntrata = ((high + SpreadEntrata) - close)EntrataPendente = close + max(StopMinimo, StopEntrata) + 1StopPendente = (EntrataPendente - (low - SpreadPendente - MarginePendente))//STOP CORRETTOBUY LotNumber CONTRACT AT EntrataPendente * pipsize STOPSET STOP pTRAILING StopPendente * pipsizeELSIF TipoBarra = 2 AND TradingDay AND TradingOrario THEN//PASSO = 2StopEntrata = (close - (low - SpreadEntrata))EntrataPendente = close - max (StopMinimo,StopEntrata) - 1StopPendente = ((high + SpreadPendente + MarginePendente) - EntrataPendente)//STOP CORRETTOSELLSHORT LotNumber CONTRACT AT EntrataPendente * pipsize STOPSET STOP pTRAILING StopPendente * pipsizeELSIF Tipobarra = 4 AND TradingDay AND TradingOrario THEN//PASSO = 4EntrataPendente = high + SpreadEntrata - StopMAssimoSELLSHORT LotNumber CONTRACT AT EntrataPendente * pipsize STOPSELLSHORT LotNumber CONTRACT AT EntrataPendente * pipsize LIMITSET STOP pTRAILING StopMassimoELSIF TipoBarra = 6 AND TradingDay AND TradingOrario THEN//PASSO = 6EntrataPendente = low - SpreadEntrata + StopMAssimoSELLSHORT LotNumber CONTRACT AT EntrataPendente * pipsize STOPSELLSHORT LotNumber CONTRACT AT EntrataPendente * pipsize LIMITSET STOP pTRAILING StopMassimoENDIF04/09/2020 at 11:42 PM #125509Mi sembra vada bene, ad esempio, il 24/04/2019 non è entrato perché era già a mercato dal giorno precedente.
Ho aggiunto GRAPH con vari valori per verificare certe variabili.
Ho fatto una verifica solo su 4-5 operazioni. Magari è un puro caso che vadano bene.
Se ce n’è qualcuna errata dimmi in che giorno e perché avrebbe dovuto entrare e non è entrata, così verifico una (o più di una) operazione specifica.
Ecco il codice modificato e con l’aggiunta di GRAPH per il debugging:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104DEFPARAM CumulateOrders = FalseDEFPARAM PreLoadBars = 10000////////////////////////////////////////////////////////////////////////////////////////ONCE Capitale = 4196ONCE LotNumber = 1ONCE MinLots = 1ONCE SpreadEntrata = 10ONCE SpreadPendente = 10//ONCE MargineEntrata = 1ONCE MarginePendente = 1ONCE StopMinimo = 40ONCE StopMassimo = 200ONCE LimiteMaxBarra = 450//NumeroBarra = 0//OrarioChiusura = 0TradingDay = OpenDayOfWeek >= 0 AND OpenDayOfWeek <= 5 //trade only Mon. to Fri.TradingOrario = CurrentTime <=210000 AND CurrentTime>=000000//Testo se la barra è di alta volatilitàAltaVolatilita = range > LimiteMaxBarra//Definisco il tipo barraIF (close > (high + low) / 2) AND NOT AltaVolatilita THENTipoBarra = 1ELSIF (close < (high + low) /2) AND NOT AltaVolatilita THENTipoBarra = 2ELSIF (close > (high + low) / 2) AND AltaVolatilita THENTipoBarra = 3ELSIF (close > (high + low) / 2) AND AltaVolatilita AND (high - close) > StopMassimo THENTipoBarra = 4ELSIF (close < (high + low) /2) AND AltaVolatilita AND (close - low) < StopMassimo THENTipoBArra = 5ELSIF (close < (high + low) /2) AND AltaVolatilita AND (close - low) > StopMassimo THENTipoBarra = 6ENDIF// Chiude tutte le posizioni alla chiusura della barraIF (Barindex -Tradeindex) >= 1 THENIF ONMARKET THENSELL AT MARKET //exit LONG trades, if anyEXITSHORT AT MARKET //exit SHORT trades, if anyENDIFENDIF//Credo dica il profitto è dato dal capitale + il ricavato dal programmaMyProfit = Capitale + StrategyProfit//Credo centri qualche cosa con l'aumento della size al cambio del meseIF Month <> Month[1] THENLotNumber = max(MinLots, (MyProfit / Capitale))ENDIFPASSO = 0StopPendente = 0StopEntrata = 0EntrataPendente = 0IF TipoBarra = 1 AND TradingDay AND TradingOrario THENPASSO = 1StopEntrata = ((high + SpreadEntrata) - close)EntrataPendente = close + max(StopMinimo, StopEntrata) + 1StopPendente = (EntrataPendente - (low - SpreadPendente - MarginePendente))//STOP CORRETTO//BUY LotNumber CONTRACT AT EntrataPendente * pipsize STOPBUY LotNumber CONTRACT AT EntrataPendente STOP//SET STOP pTRAILING StopPendente * pipsizeSET STOP TRAILING StopPendenteELSIF TipoBarra = 2 AND TradingDay AND TradingOrario THENPASSO = 2StopEntrata = (close - (low - SpreadEntrata))EntrataPendente = close - max (StopMinimo,StopEntrata) - 1StopPendente = ((high + SpreadPendente + MarginePendente) - EntrataPendente)//STOP CORRETTO//SELLSHORT LotNumber CONTRACT AT EntrataPendente * pipsize STOPSELLSHORT LotNumber CONTRACT AT EntrataPendente STOP//SET STOP pTRAILING StopPendente * pipsizeSET STOP TRAILING StopPendenteELSIF Tipobarra = 4 AND TradingDay AND TradingOrario THENPASSO = 4EntrataPendente = high + SpreadEntrata - StopMAssimo//SELLSHORT LotNumber CONTRACT AT EntrataPendente * pipsize STOPSELLSHORT LotNumber CONTRACT AT EntrataPendente STOP//SELLSHORT LotNumber CONTRACT AT EntrataPendente * pipsize LIMITSELLSHORT LotNumber CONTRACT AT EntrataPendente LIMITSET STOP TRAILING StopMassimoELSIF TipoBarra = 6 AND TradingDay AND TradingOrario THENPASSO = 6EntrataPendente = low - SpreadEntrata + StopMAssimo//SELLSHORT LotNumber CONTRACT AT EntrataPendente * pipsize STOPSELLSHORT LotNumber CONTRACT AT EntrataPendente STOP//SELLSHORT LotNumber CONTRACT AT EntrataPendente * pipsize LIMITSELLSHORT LotNumber CONTRACT AT EntrataPendente LIMITSET STOP TRAILING StopMassimoENDIF//graph Passograph TipoBarragraph EntrataPendentegraph StopEntratagraph StopPendenteHo tolto tutti i “* pipsize”, in quanto avevi mischiato un pò le cose, per fortuna sul Nikkei, come sul Dax ed altri indici, il rapporto tra pips e prezzo è 1:1, per cui in realtà non cambia niente, ma sul Forex o altri strumenti avreste avuto risultati imprevedibili.
PIPSIZE è una costante di sistema che permete di convertire da Pips a Prezzo o viceversa.
Per convertire un numero, ad esempio 10, oppure una variabile, ad esempio StopMassimo, in Pips, ocorre scrivere:
12IF high - close > 10 * pipsize THEN....SET Stop pLOSS StopMassimo * pipsizeovviamente una volta che un dato è convertito in pips NON si può mischiare con un prezzo o cun una differenza di prezzi (tipo RANGE), non si può scrivere:
12StopMassimo = 10 * pipsizeStopPendente = CLOSE + StopMassimo //CLOSE è un prezzo, StopMassimo soni PIPSL’operazione opposta è la conversione da Prezzo in Pips:
12IF (high - close) / pipsize > 10 * pipsize then... //converto la differenza di prezzo in pips e poi la confronto con un valore espresso in pipsSET Stop pLOSS (high - close) / pipsizeL’importante è NON mischiare PIPS e PREZZI.
Un’entrata con ordine pendente NON si può fare sui pips, ma su un certo prezzo (anche se, ripeto, in questo caso la cosa è ininfluente sul risultato).
04/10/2020 at 8:33 AM #125526Per il trailing stop è consigliabile usare il codice dalle righe 17 a 56 a questo link https://www.prorealcode.com/blog/trading/complete-trailing-stop-code-function/.
SET STOP TRAILING può dare risultati molto diversi tra backtest e reale ed ha un passo di una sola unità (predefinita e immodificabile). Gli si può solo dire quando iniziare.
04/11/2020 at 4:04 PM #125710Grazie Roberto.
Il programma lo faccio girare sul Japan 225 barre orarie, quando l’ordine non viene pescato allora Pro Order lo cancella in automatico e va tutto bene. Nel caso l’ordine venga pescato nella barra oraria, alla chiusura della barra (chiamiamola barra 0) la posizione viene chiusa, ma non viene messo l’ordine nella barra successiva (barra 1). Nella barra ancora successiva (barra 2) viene regolarmente messo. Può essere che se apro una posizione long, a fine barra la chiude, ma non posso aprirne una di short?
Mi chiedevo se ogni strategia debba andare in un solo verso, ovvero se ho una strategia che in base a determinati valori di mercato debba entrare long o short, debba dividere la strategia stessa in due programmi di trading.
Mi potresti dire dove posso andare a leggeri come funzionano i programmi di prorealtime, non intendo come comandi, ma come vengono eseguiti, con che frequenza e quando?
Ti ringrazio per la tua attenzione e la tua cortesia.
Buona Pasqua a te e famiglia.
04/11/2020 at 6:28 PM #125716I manuali disponibili li trovi qui:
https://www.prorealtime.com/en/pdf/probacktest.pdf
https://www.prorealtime.com/en/pdf/probuilder.pdf
https://www.prorealtime.com/en/pdf/proscreener.pdf
Certi dettagli particolari però li trovi solo su questo forum, facendo ricerche e studiando altri codici.
Le strategie possono entrare sia Long che Short, ma non contemporaneamente.
Quanto al discorso della mancata entrata dovresti dirmi ora e data di una barra dove non è entrato o dove non ha piazzato il pendente.
Ad ogni modo prova anche con TRUE al posto di FALSE alla riga 1.
04/17/2020 at 4:12 PM #12658904/17/2020 at 4:16 PM #126594EXITSHORT chiude tutte le posizioni Short aperte, non è ancora supportata la chiusura parziale (in ogni caso andrebbe comunque scritto quante se ne vogliono chiudere).
Sa cosa hai visto che ne è restata una aperta?
04/17/2020 at 4:31 PM #12660604/17/2020 at 4:50 PM #126613Per darti una risposta devo potere replicare esattamente il problema, per cui mi serve:
- il codice funzionante che hai usato tu, compresi eventuali indicatori personalizzati (se ne hai usati)
- lo strumento tradato
- il TF tradato
- l’ora e data delle candele dove c’è stato l’errore.
04/17/2020 at 5:52 PM #126634Japan 225, 30 minuti. Prima posizione entrata alle ore 15, seconda posizione entrata alle ore 15.30. Seconda posizione chiusa alle 17 (chiusura barre 16.30).
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374DEFPARAM CumulateOrders = TrueDEFPARAM PreLoadBars = 10000////////////////////////////////////////////////////////////////////////////////////////ONCE Capitale = 4196ONCE LotNumber = 1ONCE MinLots = 1ONCE SpreadEntrata = 15 * pipsizeONCE StopMinimo = 40 * pipsizeONCE StopMassimo = 200 * pipsizeONCE LimiteMaxBarra = 450 * pipsizeBarraVerde = Open < CloseBarraRossa = Open > CloseTradingDay = OpenDayOfWeek >= 0 AND OpenDayOfWeek <= 5 //trade only Mon. to Fri.AltaVolatilita = range > LimiteMaxBarra//Definisco il tipo barraIF (close >= (high + low) / 2) AND NOT AltaVolatilita THENTipoBarra = 1ELSIF (close < (high + low) /2) AND NOT AltaVolatilita THENTipoBarra = 2ELSIF (close >= (high + low) / 2) AND AltaVolatilita THENTipoBarra = 3ELSIF (close >= (high + low) / 2) AND AltaVolatilita AND (high - close) > StopMassimo THENTipoBarra = 4ELSIF (close < (high + low) /2) AND AltaVolatilita AND (close - low) < StopMassimo THENTipoBArra = 5ELSIF (close < (high + low) /2) AND AltaVolatilita AND (close - low) > StopMassimo THENTipoBarra = 6ENDIF// Se a mercato Short e Barra verde chiude la posizione SHORT, se a mercato Long e Barra rossa chiude la posizione LONGIF SHORTONMARKET AND BarraVerde THENEXITSHORT AT MARKET //exit SHORT trades, if anyELSIF LONGONMARKET AND BarraRossa THENSELL AT MARKET //exit LONG trades, if anyENDIF//Credo dica il profitto è dato dal capitale + il ricavato dal programmaMyProfit = Capitale + StrategyProfit//Credo centri qualche cosa con l'aumento della size al cambio del meseIF Month <> Month[1] THENLotNumber = max(MinLots, (MyProfit / Capitale))ENDIFIF TipoBarra = 1 AND TradingDay AND (NOT LONGONMARKET) THENStopEntrata = ((high + SpreadEntrata) - close)SELLSHORT LotNumber CONTRACT AT MARKETSET STOP pLOSS max (StopMinimo,StopEntrata) * pipsizeELSIF TipoBarra = 2 AND TradingDay AND ( NOT SHORTONMARKET) THENStopEntrata = (close - (low - SpreadEntrata))BUY LotNumber CONTRACT AT MARKETSET STOP pLOSS max (StopMinimo,StopEntrata) * pipsizeELSIF TipoBarra = 3 AND TradingDay AND (NOT LONGONMARKET) THENStopEntrata = ((high + SpreadEntrata) - close)SELLSHORT LotNumber CONTRACT AT MARKETIF StopEntrata >= 210 THENStopEntrata = StopMassimo + 10ENDIFSET STOP pLOSS max (StopMinimo,StopEntrata) * pipsizeELSIF TipoBarra = 5 AND TradingDay AND (NOT SHORTONMARKET) THENStopEntrata = (close - (low - SpreadEntrata))BUY LotNumber CONTRACT AT MARKETSET STOP pLOSS max (StopMinimo,StopEntrata) * pipsizeENDIF//GRAPH max (StopMinimo,StopEntrata) * pipsize//GRAPH TipoBarra//GRAPH SHORTONMARKET//GRAPH LONGONMARKET04/18/2020 at 8:31 AM #126680A me ne apre solo una alle 15 e la chiude alle 17, come si vede dalla foto.
Il codice è esattamente quello che hai postato, non ho cambiato niente!
04/18/2020 at 8:46 AM #126682E se insieme al programma sopra girava anche questo. Effettivamente ieri sera preso dalla fretta mi sono spiegato male. La prima posizione è stata aperta dal programma
che hai analizzato, mentre la seconda è stata aperta dal programma che ti allego ora. Alle 17 il programma qui allegato ha chiuso correttamente, mentre quello che tu hai analizzato ha lasciato aperta la posizione, invece di chiuderla come mi hai fatto vedere tu.
Può essere che i due programmi in qualche maniera vadano in collisione?
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768ONCE Capitale = 4196ONCE LotNumber = 1ONCE MinLots = 1ONCE SpreadEntrata = 15 * pipsizeONCE SpreadPendente = 15 * pipsizeONCE MarginePendente = 1 * pipsizeONCE StopMinimo = 63 * pipsizeONCE StopMassimo = 200 * pipsizeONCE LimiteMaxBarra = 450 * pipsizeBarraVerde = Close > OpenBarraRossa = Close < OpenTradingDay = OpenDayOfWeek >= 0 AND OpenDayOfWeek <= 6 //trade only Mon. to Fri.//Testo se la barra è di alta volatilitàAltaVolatilita = range > LimiteMaxBarra//Definisco il tipo barraIF (close > (high + low) / 2) AND NOT AltaVolatilita THENTipoBarra = 1ELSIF (close < (high + low) /2) AND NOT AltaVolatilita THENTipoBarra = 2ELSIF (close > (high + low) / 2) AND AltaVolatilita THENTipoBarra = 3ELSIF (close > (high + low) / 2) AND AltaVolatilita AND (high - close) > StopMassimo THENTipoBarra = 4ELSIF (close < (high + low) /2) AND AltaVolatilita AND (close - low) < StopMassimo THENTipoBArra = 5ELSIF (close < (high + low) /2) AND AltaVolatilita AND (close - low) > StopMassimo THENTipoBarra = 6ENDIF// Se a mercato e Barra verde esceIF SHORTONMARKET AND BarraVerde THENEXITSHORT AT MARKET //exit SHORT trades, if anyELSIF LONGONMARKET AND BarraRossa THENSELL AT MARKET //exit LONG trades, if anyENDIF//Credo dica il profitto è dato dal capitale + il ricavato dal programmaMyProfit = Capitale + StrategyProfit//Credo centri qualche cosa con l'aumento della size al cambio del meseIF Month <> Month[1] THENLotNumber = max(MinLots, (MyProfit / Capitale))ENDIFIF TipoBarra = 1 AND TradingDay AND (NOT SHORTONMARKET) THENStopEntrata = ((high + SpreadEntrata) - close)EntrataPendente = close + max(StopMinimo, StopEntrata) + MarginePendenteStopPendente = (EntrataPendente - (low - SpreadPendente))BUY LotNumber CONTRACT AT EntrataPendente * pipsize STOPSET STOP pLOSS StopPendente * pipsizeELSIF TipoBarra = 2 AND TradingDay AND (NOT LONGONMARKET) THENStopEntrata = (close - (low - SpreadEntrata))EntrataPendente = close - max (StopMinimo,StopEntrata) - MarginePendenteStopPendente = ((high + SpreadPendente) - EntrataPendente)//STOP CORRETTOSELLSHORT LotNumber CONTRACT AT EntrataPendente * pipsize STOPSET STOP pLOSS StopPendente * pipsizeELSIF Tipobarra = 4 AND TradingDay AND (NOT LONGONMARKET) THENEntrataPendente = high + SpreadEntrata - StopMAssimoSELLSHORT LotNumber CONTRACT AT EntrataPendente * pipsize LIMITSET STOP pLOSS StopMassimoELSIF TipoBarra = 6 AND TradingDay AND (NOT SHORTONMARKET) THENEntrataPendente = low - SpreadEntrata + StopMAssimoBUY LotNumber CONTRACT AT EntrataPendente * pipsize STOPSET STOP pLOSS StopMassimoENDIF04/18/2020 at 8:54 AM #126683Per esempio Roberto anche ieri sera sempre sul japan 30 minuti alla barra delle 21 mi ha pescato l’ordine, però alla chiusura della barra delle 22.30 che è rossa non me lo ha chiuso, il programma è lo stesso che ho allegato appena prima
04/18/2020 at 10:43 AM #126706Se sono programmi diversi è normale che restino aperte.
Ogni strategia è indipendente dalle altre e ognuna di esse è all’oscuro dell’altra.
04/18/2020 at 11:31 AM #126718Ok quello ok. Ricapitolando, il primo programma che tu hai testato è quello che non mi ha chiuso la posizione alle 17 sul demo in modalità trading automatico.
Il secondo che girava assieme invece mi ha chiuso correttamente la posizione, è questo che non capisco.
Tu mi confermi che i miei codici sono corretti come chiusura?
Io voglio che la posizione si chiuda nel modo sotto:
se sono long esco alla prima barra rossa
se sono short esco alla prima barra verde
Grazie mille.
-
AuthorPosts
Find exclusive trading pro-tools on