Trader7777: double GetLastUpperFractalPrice() { for (int i = 3; i<=Bars; i++) { if (iFractals(Symbol(),PERIOD_M5,MODE_UPPER,i) != 0) return (i); { double LastUpperFractalPrice = High [i]; } } return (LastUpperFractalPrice);
}
Funzionerà o no?
No. Inserisci il codice attraverso l 'SRC nel pannello.
return (ХХХХ) ritornerà dalla funzione utente - ciò che è stato inserito lì sarà restituito da questa funzione - il valore di ХХХХ o un risultato di alcune funzioni di calcolo.
Quindi, quando viene trovato un frattale, scrivete return (High [i]) - non dovete inventare nient'altro.
Questa è una funzione elementare di immissione di ordini pendenti, i parametri non sono importanti, ma è importante per rendere l'Expert Advisor (può utilizzare il ciclo esistente di ordini pendenti) dopo aver ricevuto un "nuovo prezzo" o per resettare o altrimenti evitare di immettere ordini allo stesso prezzo. In questo caso, il ciclo di immissione degli ordini non dovrebbe fermarsi.
doppio Dist=10000.0; stringa SMB; doppio NewPrice; int i; int start() { RefreshRates(); SMB=Simbolo(); {UstanOtlozh();} } ritorno(0); void UstanOtlozh() { double OldPrice=WindowPriceOnDropped(); // Qui viene lanciato lo script RefreshRates(); SMB=Simbolo(); { int i=1; mentre(i<=OrdiniTotali()) { if (OrderSelect(i-1,SELECT_BY_POS)==true) // se c'è un { // Analisi dell'ordine: if (OrderSymbol()!= SMB) continue; // Non è il nostro strumento finanziario. int Tip=OrderType(); // Tipo di ordine if (Tip<2) continue; // Ordine a mercato double NewPrice=OrderOpenPrice(); // Prezzo dell'ordine { while(NewPrice<=Ask+200*Point||NewPrice>=Ask+50*Point) { NewPrice=NewPrice+50*Point; OrderSend(SMB,OP_BUYSTOP,0.01,NewPrice,3,0,0,0,NULL,0,CLR_NONE); if(NewPrice>Ask+200*Point||NewPrice<Ask+50*Point) pausa; }}}}}}
ALXIMIKS: L'ho aggiustato per compilare - e usare 555 build di mt4 EDITOR - aiuta davvero a trovare i problemi velocemente. basta leggere il manuale prima di installare - le prime 15 pagine.
Non avrei mai pensato di chiedere una cosa così semplice. Durante la compilazione, ottengo un messaggio che la funzione BU() non è coinvolta. L'ho messo in questo modo (il codice è dato) ora tutto si compila, ma la funzione breakeven non funziona. Funziona in altri EA e ha la stessa funzione di Breakeven.
int start()
{
if(Volume[0]>1) return;
if (CountTrades()==0 && Open[1]>Close[1] && Open[2]<Close[2] && High[1]>High[2] && Low[1]<Low[2]) // продажа
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"Pattern_1",111,0,Red);
if (OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES))
{
TP=NormalizeDouble(Bid - TakeProfit * Point, Digits);
OrderModify(ticket, OrderOpenPrice(),0,TP,0);
}
}
elseif (CountTrades()==0 && Open[1]<Close[1] && Open[2]>Close[2] && High[1]>High[2] && Low[1]<Low[2]) // покупка
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"Pattern_1",111,0,Blue);
if (OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES))
{
TP=NormalizeDouble(Ask + TakeProfit * Point, Digits);
OrderModify(ticket, OrderOpenPrice(),0,TP,0);
}
}
if (CountTrades()>0)
{
otype = FindLastOrderType();
if (otype == OP_BUY)
{ // ценапоследнего ордера на покупку
price = FindLastBayPrice();
if ((Bid - price) / Point >= Step)
{
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid,Slippage,0,0,"Pattern_1",111,0,Red);
}
}
elseif (otype == OP_SELL)
{ // цена последнего ордера на продажу
price = FindLastSellPrice();
if ((price - Ask) / Point >= Step)
{
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask,Slippage,0,0,"Pattern_1",111,0,Blue);
}
}
}
BU();
return(0);
}
Non avrei mai pensato di chiedere una cosa così semplice. Durante la compilazione, ottengo un messaggio che la funzione BU() non è coinvolta. L'ho messo in questo modo (il codice è dato) ora tutto si compila, ma la funzione breakeven non funziona. In altri EAs funziona esattamente la stessa funzione di pareggio.
L'unica ragione è il ritorno dell'operatore if(...) non corretto; Sembra che tu ne abbia solo uno - all'inizio del programma.
L'unica ragione è un ritorno dell'operatore if(...) non corretto; Sembra che tu ne abbia uno - all'inizio del programma.
Questo è stato rimosso. Ma il problema sta altrove: nella normalizzazione. Per qualche ragione, il mio Expert Advisor ha letto 4 cifre decimali e non 5.
{
for (int i = 3; i<=Bars; i++)
if (iFractals(Symbol(),PERIOD_M5,MODE_UPPER,i) != 0) return (i);
double LastUpperFractalPrice = High [i]; return (LastUpperFractalPrice);
}
è corretto? Questa funzione restituirà il prezzo dell' ultimo frattale superiore?
è corretto? Questa funzione restituirà il prezzo dell'ultimo frattale superiore?
Esempio di ricerca frattale
{
for (int i = 3; i<=Bars; i++)
{
if (iFractals(Symbol(),PERIOD_M5,MODE_UPPER,i) != 0) return (i);
{
double LastUpperFractalPrice = High [i];
}
}
return (LastUpperFractalPrice);
}
Funzionerà o no?
double GetLastUpperFractalPrice()
{
per (int i = 3; i<=Bars; i++)
{
se (iFractals(Symbol(),PERIOD_M5,MODE_UPPER,i) != 0)
{
double LastUpperFractalPrice = High [i];
}
}
ritorno (LastUpperFractalPrice;)
}
Funzionerà o no?
Così, per esempio, sarà:
Così come l'avete voi, non lo farà.
double GetLastUpperFractalPrice()
{
for (int i = 3; i<=Bars; i++)
{
if (iFractals(Symbol(),PERIOD_M5,MODE_UPPER,i) != 0) return (i);
{
double LastUpperFractalPrice = High [i];
}
}
return (LastUpperFractalPrice);
}
Funzionerà o no?
No. Inserisci il codice attraverso l 'SRC nel pannello.
return (ХХХХ) ritornerà dalla funzione utente - ciò che è stato inserito lì sarà restituito da questa funzione - il valore di ХХХХ o un risultato di alcune funzioni di calcolo.
Quindi, quando viene trovato un frattale, scrivete return (High [i]) - non dovete inventare nient'altro.
Molto più avanti di te))
Questa è una funzione elementare di immissione di ordini pendenti, i parametri non sono importanti, ma è importante per rendere l'Expert Advisor (può utilizzare il ciclo esistente di ordini pendenti) dopo aver ricevuto un "nuovo prezzo" o per resettare o altrimenti evitare di immettere ordini allo stesso prezzo. In questo caso, il ciclo di immissione degli ordini non dovrebbe fermarsi.
doppio Dist=10000.0;
stringa SMB;
doppio NewPrice;
int i;
int start()
{
RefreshRates();
SMB=Simbolo();
{UstanOtlozh();}
}
ritorno(0);
void UstanOtlozh()
{
double OldPrice=WindowPriceOnDropped(); // Qui viene lanciato lo script
RefreshRates();
SMB=Simbolo();
{
int i=1;
mentre(i<=OrdiniTotali())
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // se c'è un
{ // Analisi dell'ordine:
if (OrderSymbol()!= SMB) continue; // Non è il nostro strumento finanziario.
int Tip=OrderType(); // Tipo di ordine
if (Tip<2) continue; // Ordine a mercato
double NewPrice=OrderOpenPrice(); // Prezzo dell'ordine
{
while(NewPrice<=Ask+200*Point||NewPrice>=Ask+50*Point)
{
NewPrice=NewPrice+50*Point;
OrderSend(SMB,OP_BUYSTOP,0.01,NewPrice,3,0,0,0,NULL,0,CLR_NONE);
if(NewPrice>Ask+200*Point||NewPrice<Ask+50*Point)
pausa;
}}}}}}
L'ho aggiustato per compilare - e usare 555 build di mt4 EDITOR - aiuta davvero a trovare i problemi velocemente. basta leggere il manuale prima di installare - le prime 15 pagine.
Non avrei mai pensato di chiedere una cosa così semplice. Durante la compilazione, ottengo un messaggio che la funzione BU() non è coinvolta. L'ho messo in questo modo (il codice è dato) ora tutto si compila, ma la funzione breakeven non funziona. Funziona in altri EA e ha la stessa funzione di Breakeven.
Non avrei mai pensato di chiedere una cosa così semplice. Durante la compilazione, ottengo un messaggio che la funzione BU() non è coinvolta. L'ho messo in questo modo (il codice è dato) ora tutto si compila, ma la funzione breakeven non funziona. In altri EAs funziona esattamente la stessa funzione di pareggio.
L'unica ragione è il ritorno dell'operatore if(...) non corretto; Sembra che tu ne abbia solo uno - all'inizio del programma.
Signori!!! Su cosa siete confusi?
iFractals() restituisce il prezzo, non il numero di barra del frattale.
L'unica ragione è un ritorno dell'operatore if(...) non corretto; Sembra che tu ne abbia uno - all'inizio del programma.