Universale MA Croce EA - pagina 105

 
sachin_syd:
Caro Mrtools/Mladen

Puoi impostare il parametro di distanza massima per essere la distanza del prezzo di chiusura di una barra dalla lenta ma

l'impostazione attuale è senza senso imho

Grazie

Sachin

Sachin

Trova semplicemente la linea che fa così:

MaxDistance = MathFloor(MathAbs((FastMACurrent-SlowMACurrent)/pPoint));

e sostituisci FastMACurrent con Close[1] (per la chiusura della prima barra chiusa) o Close[0] (per la chiusura della barra ancora aperta)

 

ok l'ho fatto ora testando...grazie

cud u plz anche assistere qui: https: //www.mql5.com/en/forum/general

mladen:
Sachin

Basta trovare la linea che va come questa:

MaxDistance = MathFloor(MathAbs((FastMACurrent-SlowMACurrent)/pPoint));

e sostituite FastMACurrent con Close[1] (per la chiusura della prima barra chiusa) o Close[0] (per la chiusura della barra ancora aperta)
 

Caro Mladen, puoi controllare perché il filtro orario non funziona? Vedi le linee verticali rosse sul grafico dove non dovrebbe fare trading ma lo fa. In Ea ho impostato il trading solo in certe ore. Molte grazie

mladen:
Sachin

Trova semplicemente la linea che fa così:

MaxDistance = MathFloor(MathAbs((FastMACurrent-SlowMACurrent)/pPoint));

e sostituite FastMACurrent con Close[1] (per la chiusura della prima barra chiusa) o Close[0] (per la chiusura della barra ancora aperta)
File:
untitled.png  28 kb
untitled_1.png  29 kb
 

Ciao Mladen,

Non ho potuto compilare il codice mql4 a causa dei seguenti errori:

extern string Pivot.Setting = "---------- Pivot Filter Setting";

extern bool Use.Pivot.Filter = false;

==> '.' - punto e virgola previsto MACrossEAV1.5.mq4 77 28 if(Use.Pivot.Filter==true)

==> 'Use' - identificatore non dichiarato MACrossEAV1.5.mq4 458 7

'Pivot' - struttura o tipo di classe previsto MACrossEAV1.5.mq4 458 11

'Filter' - struttura o tipo di classe previsto MACrossEAV1.5.mq4 458 17

Cosa ho fatto di sbagliato?

Grazie per il vostro aiuto

 
StephFX:
Ciao Mladen,

Non ho potuto compilare il codice mql4 a causa dei seguenti errori:

extern string Pivot.Setting = "---------- Pivot Filter Setting";

extern bool Use.Pivot.Filter = false;

==> '.' - punto e virgola previsto MACrossEAV1.5.mq4 77 28 if(Use.Pivot.Filter==true)

==> 'Use' - identificatore non dichiarato MACrossEAV1.5.mq4 458 7

'Pivot' - struttura o tipo di classe previsto MACrossEAV1.5.mq4 458 11

'Filter' - struttura o tipo di classe previsto MACrossEAV1.5.mq4 458 17

Cosa ho fatto di sbagliato?

Grazie per il vostro aiuto

StephFX

Rimuovi il "." dal nome della variabile

Puoi sostituirlo con "_" per esempio e poi avrai :

extern string Pivot_Setting = "---------- Pivot Filter Setting";

extern bool Use_Pivot_Filter = false;

e questo

if(Use_Pivot_Filter==true)

e poi tutto verrà compilato OK

 

Ciao a tutti,

Dato che sto provando una strategia martingala, ho cercato di fare in modo che "STOP AND REVERSE" funzioni solo quando l'ultimo trade è stato vincente.

int histotal=OrdersHistoryTotal(); if (histotal>0)

{

for(int count=histotal-1;count>=0;count--)

{

if(OrderSelect(count,SELECT_BY_POS,MODE_HISTORY))

{

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)

{

if(OrderProfit()>0)

{

if(StopAndReverse==true && subTotalTrade()>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 !");

}

}

}

}

}

}

}

Tuttavia, non sembra funzionare. Si fermerà e invertirà anche se l'ultimo trade era in perdita. Qualche suggerimento?

Grazie!

 
BlackCoq:
Ciao a tutti,

Dato che sto provando una strategia martingala, ho cercato di fare in modo che "STOP AND REVERSE" funzioni solo quando l'ultimo trade è stato vincente.

Tuttavia, non sembra funzionare. Si fermerà e invertirà anche se l'ultimo trade era una perdita. Qualche suggerimento?

Grazie!

Non state controllando l'ora dell'ordine. Devi controllare anche il tempo di chiusura dell'ordine, e l'ordine con il tempo di chiusura maggiore è quello che vuoi controllare per il profitto

 
mladen:
Non stai controllando il tempo dell'ordine. Devi controllare anche il tempo di chiusura dell'ordine, e l'ordine con il tempo di chiusura maggiore è quello che vuoi controllare per il profitto

Il fatto è che io uso un codice molto simile per il sistema martingala che funziona perfettamente:

//|---------martingale

int martingalefactor()

{

int histotal=OrdersHistoryTotal();

se (histotal>0)

{

for(int cnt=histotal-1;cnt>=0;cnt--)

{

if(OrderSelect(cnt,SELECT_BY_POS,MODE_HISTORY))

{

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)

{

if(OrderProfit()<0)

{

lotsfactor=lotsfactor*multiplier;

return(lotsfactor);

}

else

{

lottifattore=fattore iniziale;

if(lotsfactor<=0)

{

lotsfactor=1;

}

return(lotsfactor);

}

}

}

}

}

return(lotsfactor);

}

Dato che funziona per la martingala, non dovrebbe funzionare anche ora?

 
BlackCoq:
Il fatto è che uso un codice molto simile per il sistema martingala che funziona perfettamente: Visto che funziona per la martingala, non dovrebbe funzionare anche ora?

Provate a usare qualcosa come questo:

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);

}

Ti restituirà l'importo esatto del profitto (o della perdita) dell'ultimo ordine

 
mladen:
Provate a usare qualcosa come questo: vi restituirà l'importo esatto del profitto (o della perdita) dell'ultimo ordine

Grazie per il tuo aiuto, Mladen. Ho modificato un po' il codice fino a quando non l'ho compilato senza errori, ma l'EA si ferma ancora e si inverte dopo una perdita. Questo è il codice esatto che sto usando ora:

{

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();

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

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

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

}

}

}

double GetLastPL() Mi dà il seguente errore: '(' - function definition unexpected.

Motivazione: