Aiuto per la codifica - pagina 237

 

Ciao a tutti,

Ho alcune brevi domande di codifica, il mio MT4 sembra essere migrato verso MQL5.

Alcuni blocchi di codice di cancellazione non funzionano più:

Sotto ottengo il messaggio di errore:

'(' Puntatore oggetto atteso.

//+----------------------------------------------------------------------------+//| Chiudi e cancella |

//+----------------------------------------------------------------------------+

if(sell)if(oppositeclose)close(OP_BUY);

if(buy)if(oppositeclose)close(OP_SELL);

if(hidetp || hidesl){hideclose(OP_BUY);hideclose(OP_SELL);}

if(usetimeout && onetime){closetime(OP_BUY);closetime(OP_SELL);}

if(onecancelother){if(totalsell>0){delete(OP_BUYSTOP);delete(OP_BUYLIMIT);}if(totalbuy>0){delete(OP_SELLSTOP);delete(OP_SELLLIMIT);}}

Sotto ottengo i messaggi di errore: 'delete' - nome atteso e

'}' - non sono ammesse in un ambito globale

void delete(int type){

if(OrdiniTotali()>0){

for(i=Totale ordini();i>=0;i--){

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

se(tipo!=6){

if(OrderSymbol()==Symbol() && OrderMagicNumber()==magico && OrderType()==tipo){

OrderDelete(OrderTicket());

}

}

se(tipo==6){

if(OrderSymbol()==Symbol() && OrderMagicNumber()==magico && OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP

|| OrderType()==OP_BUYLIMIT || OrderType()==OP_SELLLIMIT){

OrderDelete(OrderTicket());

}

}

}

}

}

Qualcuno potrebbe per favore aiutare?

Grazie in anticipo!

 

Ciao colleghi commercianti/codificatori!

Spero che qualcuno possa aiutarmi.

Cercando e provando i pochi EA in giro, non ho ancora trovato quello che sto cercando.

Forse sto cercando qualcosa che è difficile da trovare o non mi sto impegnando al massimo :-)

Faccio trading anche con un sistema SR disegnando le mie linee e creando canali temporanei. C'è qualcosa che può eseguire posizioni quando il prezzo raggiunge le linee? Il fatto è che deve essere in grado di aprire posizioni ogni volta che il prezzo colpisce le linee. Linee rosse per vendere, blu per comprare, gialle per SL e verdi per TP. Quindi niente operazioni una tantum o OCO.

Grazie in anticipo!

File:
sr.png  34 kb
 
daytrade:
Ciao colleghi trader/codificatori!

Spero che qualcuno possa aiutarmi.

Cercando e provando i pochi EA in giro, non ho ancora trovato quello che sto cercando.

Forse sto cercando qualcosa che è difficile da trovare o non mi sto impegnando al massimo :-)

Faccio trading anche con un sistema SR disegnando le mie linee e creando canali temporanei. C'è qualcosa che può eseguire posizioni quando il prezzo raggiunge le linee? Il fatto è che deve essere in grado di aprire posizioni ogni volta che il prezzo colpisce le linee. Linee rosse per vendere, blu per comprare, gialle per SL e verdi per TP. Quindi niente operazioni una tantum o OCO.

Grazie in anticipo!

Hai controllato l'EA di questo thread: https: //www.mql5.com/en/forum/176382?

 

Modificare lo stop loss

Ciao a tutti,

Qualcuno sa perché il mio ordine modify stop loss non funziona correttamente?

Lo stop loss oscilla molto rapidamente tra il DonchianLowM5 e l'OrderOpenPrice quando il DonchianLowM5 si muove sopra l'OrderOpenPrice.

Questo è il codice (scusate, non so come incollarlo correttamente).

//--- Movimento dello stop loss

if (OrdersTotal() > 0)

{

for (int i = 0; i < OrdersTotal(); i++)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

se (OrderType() == OP_BUY)

{

se (OrderStopLoss() < OrderOpenPrice())

{

se (DonchianLowM5 > OrderStopLoss())

{

OrderModify(OrderTicket(), OrderOpenPrice(), DonchianLowM5, OrderTakeProfit(), OrderExpiration(), Green);

}

}

se (OrderStopLoss() > OrderOpenPrice())

{

se (DonchianLowH4 <= OrderOpenPrice())

{

OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), OrderExpiration(), Green);

}

}

se (OrderStopLoss() >= OrderOpenPrice())

{

se (DonchianLowH4 > OrderStopLoss())

{

OrderModify(OrderTicket(), OrderOpenPrice(), DonchianLowH4, OrderTakeProfit(), OrderExpiration(), Green);

}

}

}

Un po' di perplessità.

Lo scopo del codice è di:

1. 1. Modificare lo stop loss per seguire il Canale di Donchian inferiore sul grafico M5 fino a OrderOpenPrice. Lo stop loss non deve seguire il canale di Donchian sul grafico M5 oltre l'OrderOpenPrice. Si muove per andare in pareggio.

2. Alcune volte una grande candela chiuderà oltre l'OrderOpenPrice e quindi la seconda sezione del codice è per riportarla solo al break even.

3. Lo stop loss consiste nel seguire il Donchian Low sul grafico H4 una volta che il Donchian Channel sul grafico H4 supera l'OrderOpenPrice.

I canali di Donchian sono codificati come segue:

DonchianLowM5 = iLow(NULL, TimingChart, iLowest(NULL, TimingChart, MODE_LOW, TimingDNCPeriod, TimingChartShift + 1));

DonchianHighM5 = iHigh(NULL, TimingChart, iHighest(NULL, TimingChart, MODE_HIGH, TimingDNCPeriod, TimingChartShift + 1));

Ho controllato il diario e lo stop loss si modifica ESATTAMENTE all'OrderOpenPrice (non è al di sotto, nemmeno di una frazione di pip che lo porterebbe a seguire il Donchian Low sul grafico M5.

Qualcuno sa cosa sta facendo questo?

 
crsnape@btinternet.com:
Ciao a tutti,

Qualcuno sa perché il mio ordine stop loss modificato non funziona correttamente?

Lo stop loss oscilla molto rapidamente tra DonchianLowM5 e OrderOpenPrice quando DonchianLowM5 si muove sopra OrderOpenPrice.

Questo è il codice (scusate, non so come incollarlo correttamente).

//--- Movimento dello stop loss

if (OrdersTotal() > 0)

{

for (int i = 0; i < OrdersTotal(); i++)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

se (OrderType() == OP_BUY)

{

se (OrderStopLoss() < OrderOpenPrice())

{

se (DonchianLowM5 > OrderStopLoss())

{

OrderModify(OrderTicket(), OrderOpenPrice(), DonchianLowM5, OrderTakeProfit(), OrderExpiration(), Green);

}

}

se (OrderStopLoss() > OrderOpenPrice())

{

se (DonchianLowH4 <= OrderOpenPrice())

{

OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), OrderExpiration(), Green);

}

}

se (OrderStopLoss() >= OrderOpenPrice())

{

se (DonchianLowH4 > OrderStopLoss())

{

OrderModify(OrderTicket(), OrderOpenPrice(), DonchianLowH4, OrderTakeProfit(), OrderExpiration(), Green);

}

}

}

Un po' di perplessità.

Lo scopo del codice è di:

1. 1. Modificare lo stop loss per seguire il Canale di Donchian inferiore sul grafico M5 fino a OrderOpenPrice. Lo stop loss non deve seguire il canale di Donchian sul grafico M5 oltre l'OrderOpenPrice. Si muove per andare in pareggio.

2. A volte una grande candela chiuderà oltre l'OrderOpenPrice e quindi la seconda sezione del codice è per riportarla solo al break even.

3. Lo stop loss consiste nel seguire il Donchian Low sul grafico H4 una volta che il Donchian Channel sul grafico H4 supera l'OrderOpenPrice.

I canali di Donchian sono codificati come segue:

DonchianLowM5 = iLow(NULL, TimingChart, iLowest(NULL, TimingChart, MODE_LOW, TimingDNCPeriod, TimingChartShift + 1));

DonchianHighM5 = iHigh(NULL, TimingChart, iHighest(NULL, TimingChart, MODE_HIGH, TimingDNCPeriod, TimingChartShift + 1));

Ho controllato il diario e lo stop loss si modifica ESATTAMENTE all'OrderOpenPrice (non è al di sotto, nemmeno di una frazione di pip che lo porterebbe a seguire il Donchian Low sul grafico M5.

Qualcuno sa cosa sta facendo questo?

Stai usando DonchianLowM5 e DonchianLowH4 (presumo che siano valori diversi). Questo potrebbe causarti un problema

 

Ciao Mladen,

Grazie per la tua risposta.

DonchianLowM5 e DonchianLowH4 sono valori diversi ma ognuno ha il suo scopo. Il DonchianLowM5 è usato per regolare lo SL in modo da raggiungere il pareggio nelle prime fasi di un'operazione. Il DonchianLowH4 regola lo SL come meccanismo di trailing stop. Questo dovrebbe entrare in vigore solo quando il DonchianLowH4 supera OrderOpenPrice.

Ho indagato un po' di più su questo problema e forse ho trovato il problema. Volevo determinare se la funzione OrderModify stava riposizionando lo SL esattamente come OrderOpenPrice. Ma non è così. OrderOpenPrice nel mio giornale è indicato come 1,12224, con una precisione di 5 cifre, eppure la funzione Print sottostante indica che OrderOpenPrice è solo di 4 cifre. Quindi l'SL userà questa cifra a 4 cifre e non a 5. Ho bisogno che usi le 5 cifre.

Come posso fare in modo che l'ordermodify regoli SL all'ESATTAMENTE l'orderopenprice a 5 cifre?

Questo è il mio codice:

{

OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), OrderExpiration(), Green);

Print("SL modificato a Order Open Price ", OrderOpenPrice());

}

Ho provato questo ma non funziona:

OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(OrderOpenPrice(), 5), OrderTakeProfit(), OrderExpiration(), Green);

Print("SL modificato a Order Open Price ", OrderOpenPrice());

Il mio broker ha 5 cifre perché il giornale conferma il prezzo a cui ha aperto l'ordine a 1,12224.

Spero che la mia spiegazione abbia senso. Qualche idea?

 
crsnape@btinternet.com:
Ciao Mladen,

Grazie per la vostra risposta.

DonchianLowM5 e DonchianLowH4 sono valori diversi ma ognuno ha il suo scopo. Il DonchianLowM5 è usato per regolare lo SL in modo da raggiungere il break even nelle prime fasi di un trade. Il DonchianLowH4 regola lo SL come meccanismo di trailing stop. Questo dovrebbe entrare in vigore solo quando il DonchianLowH4 supera OrderOpenPrice.

Ho indagato un po' di più su questo problema e forse ho trovato il problema. Volevo determinare se la funzione OrderModify stava riposizionando lo SL esattamente come OrderOpenPrice. Ma non è così. OrderOpenPrice nel mio giornale è indicato come 1,12224, con una precisione di 5 cifre, eppure la funzione Print sottostante indica che OrderOpenPrice è solo di 4 cifre. Quindi l'SL userà questa cifra a 4 cifre e non a 5. Ho bisogno che usi le 5 cifre.

Come posso fare in modo che l'ordermodify regoli SL all'ESATTAMENTE l'orderopenprice a 5 cifre?

Questo è il mio codice:

{

OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), OrderExpiration(), Green);

Print("SL modificato a Order Open Price ", OrderOpenPrice());

}

Ho provato questo ma non funziona:

OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(OrderOpenPrice(), 5), OrderTakeProfit(), OrderExpiration(), Green);

Print("SL modificato a Order Open Price ", OrderOpenPrice());

Il mio broker ha 5 cifre perché il giornale conferma il prezzo a cui ha aperto l'ordine a 1,12224.

Spero che la mia spiegazione abbia senso. Qualche idea?

Il fatto di ottenere il prezzo stampato con una precisione di 4 cifre non è il problema: basta usare questo Print(DoubleToStr(OrderOpenPrice(),Digits)); e otterrete una stampa corretta. E' qualcos'altro il problema e ho pensato che se stai confrontando due prezzi completamente diversi potrebbe causarti questi problemi

 

Oh, giusto.

Cosa vuoi dire? Ho sbagliato la struttura delle parentesi?

Il codice dovrebbe scegliere il DonchianLowM5 o il DonchianLowH4 a seconda della situazione.

Forse la mia parentesi build up, build down è sbagliata per ogni elemento del codice.

 

Prova a semplificare il codice. Qualcosa come quello allegato

PS: controlla se questa è la logica che avevi in mente

File:
 

ciao, qui sono due indicatori, uno basato sul RSI e l'altro sull'indice di forza, ma il problema mi chiede rsi cercando curve, indica non che voglio, se avete la soluzione, ovviamente posso inviare il file se necessario grazie per il vostro aiuto ... scusa per l'inglese "google traductor"

Motivazione: