Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
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)
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.
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 !"); } } } }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)
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)
Quando provo a copiare la funzione, ottengo numerosi errori, non importa come provo a modificarla.
Questo codice:
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
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)
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
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".
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
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 EAOra funziona perfettamente. Grazie mille per il tuo aiuto e la tua pazienza!