[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 598
Senza altro il primo blocco viene eseguito per primo, poi il secondo. Con altro - o il primo o il secondo.
ooo! la logica manca altro!) lo cambierò presto! sì, e al volo: se scrivo ovunque nel testo non con la 4 ma con la 3, così:
iFractals(Symbol(),PERIOD_H1,MODE_UPPER,3);
Non ho scambi, anche se le barre al 3 sembrano essere sufficienti per far funzionare tutto, qual è il problema?
E per quanto riguarda la logica dell'indicatore, sono un po' confuso. So come funziona l'indicatore, ho solo bisogno dell'algoritmo per garantire che ifractals non sia uguale a zero, e tu mi offri di rimuovere questa condizione, è superflua? Perché lo scrivo due volte?
Buonasera, chiedo aiuto per un Expert Advisor MACD multivaluta. L'EA segue correttamente i criteri di apertura delle posizioni, ma la chiusura "a condizione" non funziona. Ho certamente iniziato a usare un trailing stop, ma la chiusura corretta non mi dà tregua.
Ecco come appare la parte principale
E questo è il blocco di chiusura. Per favore, aiutatemi a trovare l'errore!
Scusate se mi ripeto, ma per quanto mi sforzi, non riesco a trovare l'errore!
//+------------------------------------------------------------------+string lSymbol;
int init ()
{
lSymbol = Symbol();
return (0);
}
int deinit()
{return(0);}
int start()
{
double MacdCurrent, MacdPrevious, SignalCurrent;
double SignalPrevious, MaCurrent, MaPrevious;
double bid, ask, point, digits;
int cnt, ticket, total;
total = SymbolOrdersTotal (lSymbol);
if (total<1);
{
bid = MarketInfo(lSymbol,MODE_BID);
ask = MarketInfo(lSymbol,MODE_ASK);
point = MarketInfo(lSymbol,MODE_POINT);
digits= MarketInfo(lSymbol,MODE_DIGITS);
Так выглядит оснавная часть, а это злопалучный блок закрытия
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // check for opened position OrderSymbol()==lSymbol()) // check for symbol
{
if(OrderType()==OP_BUY) // long position is opened
{
// should it be closed?if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
MacdCurrent>(MACDCloseLevel*point))
{
OrderClose(OrderTicket(),OrderLots(),bid,3,Violet); // close positionreturn(0); // exit
}
// check for trailing stopif(TrailingStop>0)
{
if(bid-OrderOpenPrice()>point*TrailingStop)
{
if(OrderStopLoss()<bid-point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),bid-point*TrailingStop,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
else// go to short position
{
// should it be closed?if(MacdCurrent<0 && MacdCurrent>SignalCurrent &&
MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*point))
{
OrderClose(OrderTicket(),OrderLots(),ask,3,Violet); // close positionreturn(0); // exit
}
// check for trailing stopif(TrailingStop>0)
{
if((OrderOpenPrice()-ask)>(point*TrailingStop))
{
if((OrderStopLoss()>(ask+point*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),ask+point*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
return(0);
}
int SymbolOrdersTotal(string lSymbol)
{
int Res=0;
int total=OrdersTotal();
for (int i=0;i<total;i++)
{
if (OrderSelect(i, SELECT_BY_POS))
{
if (OrderSymbol()==lSymbol)
{
Res++;
}
}
}
return(Res);
}
// the end.
Smontate completamente la logica dell'indicatore.
Sostituiscilo prima.
su
Anche,
Senza altro il primo blocco viene eseguito per primo, poi il secondo. Con altro - o il primo o il secondo.
Non ho scambi, anche se le barre al 3 sembrano essere sufficienti per far funzionare tutto, qual è il problema?
E per quanto riguarda la logica dell'indicatore, sono un po' confuso. So come funziona l'indicatore, ho solo bisogno dell'algoritmo per garantire che ifractals non sia uguale a zero, e tu mi offri di rimuovere questa condizione, è superflua? Perché lo scrivo due volte?
Smontate completamente la logica dell'indicatore.
Sostituiscilo prima.
su
Inoltre,
Senza altro il primo blocco viene eseguito per primo, poi il secondo. Con altro - o il primo o il secondo.
È possibile combattere, e il lavoro dell'EA può essere interrotto. Dobbiamo solo cambiare l'approccio.
Come?
All'inizio del codice, passare attraverso tutti gli ordini aperti, trovare e assegnare i valori dei biglietti agli ordini, o c'è qualche altro modo?
All'inizio del codice, passare attraverso tutti gli ordini aperti, trovare e assegnare i valori dei biglietti agli ordini, o c'è qualche altro modo?
Puoi farlo se l'EA apre una o due posizioni.
Si può fare, purché il consulente apra una o due posizioni.
L'EA è multi-valuta, quindi le operazioni semplici non sembrano sempre essere risolte in una volta sola ((. E non c'è esperienza.
Il mio Expert Advisor è multivaluta, e le operazioni semplici non sembrano sempre essere risolte in una volta sola ((. E non c'è esperienza.
Devi solo fare la contabilità degli ordini in modo corretto. Ci sono molti esempi.
E l'esperienza. L'esperienza viene con il territorio. Non andrà da nessuna parte.
Devi solo assicurarti che gli ordini siano registrati correttamente. Ci sono molti esempi.
E l'esperienza. L'esperienza fa parte del territorio. Non va da nessuna parte.
Grazie per le risposte, scaverò negli archivi.
Buonasera, chiedo aiuto per un Expert Advisor MACD multivaluta. L'EA segue correttamente i criteri di apertura delle posizioni, ma la chiusura "a condizione" non funziona. Ho certamente iniziato a usare un trailing stop, ma la chiusura corretta non mi dà tregua.
Ecco come appare la parte principale
E questo è il blocco di chiusura. Per favore, aiutatemi a trovare l'errore!
Scusate se mi ripeto, ma per quanto mi sforzi, non riesco a trovare l'errore!
Ho sostituito tutto, ma continua a saltare allo stesso modo per qualche motivo...((((((