Universale MA Croce EA - pagina 106

 
BlackCoq:
Grazie per il tuo aiuto, Mladen. Ho modificato un po' il codice finché non l'ho fatto compilare senza errori, ma l'EA si ferma ancora e si inverte dopo una perdita. Questo è il codice esatto che sto usando ora: double GetLastPL() Mi dà il seguente errore: '(' - function definition unexpected.

BlackCoq

Devi fare tutti i confronti logici all'interno del ciclo perché funzioni come OrderProfit() restituiscono il profitto dell'ordine attualmente selezionato da una lista di ordini chiusi. Se non è all'interno del ciclo principale (for(int i=OrdersHistoryTotal()-1;i>=0;i--)) allora solo l'ultimo ordine selezionato sarà testato e non significa che sia l'ultimo ordine (metaquotes dichiara esplicitamente nella sua documentazione che gli ordini nella lista degli ordini chiusi (o ancora aperti) non devono essere in nessun ordine particolare - è responsabilità dei codificatori controllare l'ordine)

 
mladen:
BlackCoq Devi fare tutti i confronti logici all'interno del ciclo perché funzioni come OrderProfit() restituiscono il profitto dell'ordine attualmente selezionato da una lista di ordini chiusi. Se non è all'interno del ciclo principale (for(int i=OrdersHistoryTotal()-1;i>=0;i--)) allora solo l'ultimo ordine selezionato sarà testato e non significa che sia l'ultimo ordine (metaquotes dichiara esplicitamente nella sua documentazione che gli ordini nella lista degli ordini chiusi (o ancora aperti) non devono essere in nessun ordine particolare - è responsabilità dei codificatori controllare l'ordine)

Dopo molte ore di fallimenti con questo compito apparentemente facile, ho deciso di studiare molto di più la programmazione prima di continuare. Grazie comunque per il tuo aiuto!

Quando ho provato questo, l'EA non apriva nessuna posizione:

{ double TempLastOrderProfit = 0; datetime CloseTime = 0; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime) { CloseTime = OrderCloseTime(); } } { if(StopAndReverse==true && subTotalTrade()>0 && OrderProfit()>0) { if((LastTrade=="BUY" && SellCondition==true) || (LastTrade=="SELL" && BuyCondition==true)) { subCloseOrder(); if(subTotalTrade()>0) subCloseOrder(); if(subTotalTrade()>0) subCloseOrder();

if(IsTesting() && PrintControl==true) Print("STOP AND REVERSE !"); } } } }[/PHP]

And with this, it would "stop and reverse" even if last trade was a loss:

[PHP] { double TempLastOrderProfit = 0; datetime CloseTime = 0; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime) { CloseTime = OrderCloseTime(); TempLastOrderProfit = OrderProfit() + OrderSwap()+ OrderCommission(); } } return(TempLastOrderProfit); { if(StopAndReverse==true && subTotalTrade()>0 && TempLastOrderProfit>0) { if((LastTrade=="BUY" && SellCondition==true) || (LastTrade=="SELL" && BuyCondition==true)) { subCloseOrder(); if(subTotalTrade()>0) subCloseOrder(); if(subTotalTrade()>0) subCloseOrder();

if(IsTesting() && PrintControl==true) Print("STOP AND REVERSE !"); } } } }

Di nuovo, grazie.

 
BlackCoq:
Dopo molte ore di fallimenti con questo compito apparentemente facile, ho deciso di studiare molto di più la programmazione prima di continuare. Grazie comunque per il vostro aiuto!

Quando ho provato questo, l'EA non ha aperto nessuna posizione:

{ double TempLastOrderProfit = 0; datetime CloseTime = 0; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime) { CloseTime = OrderCloseTime(); } } { if(StopAndReverse==true && subTotalTrade()>0 && OrderProfit()>0) { if((LastTrade=="BUY" && SellCondition==true) || (LastTrade=="SELL" && BuyCondition==true)) { subCloseOrder(); if(subTotalTrade()>0) subCloseOrder(); if(subTotalTrade()>0) subCloseOrder();

if(IsTesting() && PrintControl==true) Print("STOP AND REVERSE !"); } } } }[/PHP]

And with this, it would "stop and reverse" even if last trade was a loss:

[PHP] { double TempLastOrderProfit = 0; datetime CloseTime = 0; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime) { CloseTime = OrderCloseTime(); TempLastOrderProfit = OrderProfit() + OrderSwap()+ OrderCommission(); } } return(TempLastOrderProfit); { if(StopAndReverse==true && subTotalTrade()>0 && TempLastOrderProfit>0) { if((LastTrade=="BUY" && SellCondition==true) || (LastTrade=="SELL" && BuyCondition==true)) { subCloseOrder(); if(subTotalTrade()>0) subCloseOrder(); if(subTotalTrade()>0) subCloseOrder();

if(IsTesting() && PrintControl==true) Print("STOP AND REVERSE !"); } } } }
Di nuovo, grazie.

BlackCoq

Se usi la funzione che ho postato così com'è, ti restituirà il profitto esatto dell'ultimo ordine chiuso (non c'è bisogno di cambiare nulla in essa)

 
mladen:
BlackCoq Se usi la funzione che ho postato così com'è, ti restituirà il profitto esatto dell'ultimo ordine chiuso (non c'è bisogno di cambiare nulla in essa)

Quando provo a copiare la funzione, ottengo numerosi errori, non importa come provo a modificarla.

Questo codice:

{

doppio GetLastPL()

{

double TempLastOrderProfit = 0;

datetime CloseTime = 0;

for(int i=OrdersHistoryTotal()-1;i>=0;i--)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)

{

CloseTime = OrderCloseTime();

TempLastOrderProfit = OrderProfit() + OrderSwap()+ OrderCommission();

}

}

return(TempLastOrderProfit);

{

if(StopAndReverse==true && subTotalTrade()>0 && TempLastOrderProfit>0)

{

if((LastTrade=="BUY" && SellCondition==true) || (LastTrade=="SELL" && BuyCondition==true))

{

subCloseOrder();

se(subTotalTrade()>0) subCloseOrder();

se(subTotalTrade()>0) subCloseOrder();

if(IsTesting() && PrintControl==true) Print("STOP AND REVERSE !");

}

}

}

}

Mi dà gli errori:

Compilazione di 'universalMAcrossECNmartingaleSAR.mq4'...

'(' - definizione di funzione inaspettata (538, 20)

'TempLastOrderProfit' - variabile non definita (548, 15)

'TempLastOrderProfit' - variabile non definita (551, 15)

'TempLastOrderProfit' - variabile non definita (553, 52)

 
BlackCoq:
Quando provo a copiare la funzione, ottengo numerosi errori, non importa come provo a modificarla.

Questo codice:

{ double GetLastPL() { double TempLastOrderProfit = 0; datetime CloseTime = 0; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime) { CloseTime = OrderCloseTime(); TempLastOrderProfit = OrderProfit() + OrderSwap()+ OrderCommission(); } } return(TempLastOrderProfit); { if(StopAndReverse==true && subTotalTrade()>0 && TempLastOrderProfit>0) { if((LastTrade=="BUY" && SellCondition==true) || (LastTrade=="SELL" && BuyCondition==true)) { subCloseOrder(); if(subTotalTrade()>0) subCloseOrder(); if(subTotalTrade()>0) subCloseOrder();

if(IsTesting() && PrintControl==true) Print("STOP AND REVERSE !"); } } } }[/PHP]

Gives me the errors:

[PHP]

Compiling 'universalMAcrossECNmartingaleSAR.mq4'... '(' - function definition unexpected (538, 20)'TempLastOrderProfit' - variable not defined (548, 15)'TempLastOrderProfit' - variable not defined (551, 15)'TempLastOrderProfit' - variable not defined (553, 52)

BlackCoq

Questa funzione deve essere incollata al di fuori di qualsiasi altra funzione. Ecco un ea molto semplice che mostra come funziona e come dovrebbe essere usato

File:
 
mladen:
BlackCoq Quella funzione deve essere incollata fuori da qualsiasi altra funzione. Ecco un ea molto semplice che mostra come funziona e come dovrebbe essere usato

Sono sicuro che mi manca qualcosa qui, ma anche se provo a copiare la funzione fuori da qualsiasi altra funzione nell'EA, ottengo ancora i seguenti errori:

'(' - definizione della funzione inaspettata (dopo il doppio GetLastPL())

'TempLastOrderProfit' - variabile non definita (554, 15)

'TempLastOrderProfit' - variabile non definita (557, 15)

 
BlackCoq:
Sono sicuro che mi manca qualcosa qui, ma anche se provo a copiare la funzione al di fuori di qualsiasi altra funzione nell'EA, ottengo ancora i seguenti errori:

'(' - definizione di funzione inattesa (dopo il doppio GetLastPL())

'TempLastOrderProfit' - variabile non definita (554, 15)

'TempLastOrderProfit' - variabile non definita (557, 15)

Mi dispiace, ma senza il tuo codice non ho idea di cosa tu stia facendo

Come puoi vedere da questo test EA funziona senza alcun problema

 
mladen:
Mi dispiace, ma senza il tuo codice non ho idea di cosa tu stia facendo Come puoi vedere da quel test EA funziona senza alcun problema

Anche io ottengo diversi errori quando cerco di compilare l'EA che hai allegato. Stiamo usando versioni diverse di MT4?

Sto allegando l'EA a cui sto cercando di aggiungere la funzione prima di "stop and reverse".

 
BlackCoq:
Anche io ottengo diversi errori quando provo a compilare l'EA che hai allegato. Stiamo usando versioni diverse di MT4? Sto allegando l'EA a cui sto cercando di aggiungere la funzione prima di "stop and reverse".

Se state usando la build 509 allora sostituite "void start(void)" con "void start()" e non avrete nessun errore di compilazione. Vedi gli esempi per entrambe le build 509 e 610 (la versione del metaeditor per la build 610 è 887)

Anche allegando l'EA con la funzione GetLastPL() già allegata ad esso. Tutto quello che dovete fare è una chiamata a GetLastPL() in un punto del codice in cui volete che controlli se il profitto dell'ultimo ordine era positivo o negativo

_________________________

PS: compilerà sia nella build 509 che nella build 610. In 610 otterrai 3 avvertimenti ma questi sono irrilevanti per il funzionamento dell'EA

 
mladen:
Se stai usando la build 509 allora sostituisci "void start(void)" con "void start()" e non avrai nessun errore di compilazione. Vedi gli esempi per entrambe le build 509 e 610 (la versione di metaeditor per la build 610 è 887)

Anche allegando l'EA con la funzione GetLastPL() già collegata ad esso. Tutto quello che dovete fare è una chiamata a GetLastPL() in un punto del codice in cui volete che controlli se il profitto dell'ultimo ordine era positivo o negativo

_________________________

PS: compilerà sia nella build 509 che nella build 610. In 610 otterrai 3 avvertimenti ma questi sono irrilevanti per il funzionamento di EA

Ora funziona perfettamente. Grazie mille per il tuo aiuto e la tua pazienza!