Scusate se riprendo un argomento relativamente vecchio. Ho capito tutto con il codice.
Ora ho un rompicapo: come aprire uno scambio. Per esempio, subito dopo un dato intervallo, stiamo cercando
Il prezzo è inferiore al massimo di un certo numero di punti. Apriamo un accordo.
Ho provato ad aggiungere un codice del genere e ad eseguirlo nel tester, ma non apre gli accordi.
Cosa fare?
Questo dovrebbe funzionare, non l'ho testato io stesso, poiché il terminale è impegnato nell'ottimizzazione di un altro EA finora
#define magic 123456789externint StartHour=16;
externint StartMinute=1;
externint StopHour=17;
externint StopMinute=59;
bool Flag=true; // Флаг разрешения открытия позиции, чтобы не плодить бесконечное число ордеровdouble lots=0.1;// размер лотаdouble sl=100; // стоплосс в пунктахdouble tp=100; // тейкпрофит в пунктахint ticket=-1;
int OldBar;
int init() {
sl=NormalizeDouble(sl*Point,Digits);//стоплосс в поинтах
tp=NormalizeDouble(tp*Point,Digits);//тейкпрофит в поинтахreturn(0);}
int deinit() {return(0);}
int start(){
staticdouble Maximum=-1;
int StartTime=StartHour*60+StartMinute;
int StopTime=StopHour*60+StopMinute;
if(StopTime<=StartTime) {Print("ERROR: Неправильные времена"); return(0);}
int CurrentMinutesFromDayStart=Hour()*60+Minute();// Текущее время в минутах от начала дняdatetime td=iTime(Symbol(),PERIOD_D1,0);// Время открытия дневного бара в секундах от 01.01.1970if(CurrentMinutesFromDayStart<StartTime) {Maximum=-1;Flag=true;}// Если StartTime еще не настало, то после StopTime нужно пересчитать Maximum и можно открывать ордер// В 22:55 Принудительно закрываем ордерif(CurrentMinutesFromDayStart>22*60+55 && ticket>=0) if(OrderSelect(ticket,SELECT_BY_TICKET)) if(OrderCloseTime()==0) if(OrderClose(ticket,OrderLots(),Ask,30,Magenta)) ticket=-1;
if(CurrentMinutesFromDayStart>StopTime && Maximum<0) {// если максимум ещё не посчитанdatetime ts=td+StartTime*60;// начало временного диапазона в секундах от 01.01.1970int start= iBarShift(Symbol(),PERIOD_M1,ts,false);// смещение бара, которому принадлежит ts
ts=td+StopTime*60;// конец временного диапазона в секундах от 01.01.1970int count= iBarShift(Symbol(),PERIOD_M1,ts,false);// смещение бара, которому принадлежит ts
count=start-count;// Сколко баров длится временной интервал
Maximum=iHigh(Symbol(),PERIOD_M1,iHighest(Symbol(),PERIOD_M1,MODE_HIGH,count,start));//Находим максимум на заданном временном интервале
}
if(Maximum>0 && Flag) {
double signal = Maximum - Bid;
if (signal-12*Point>0.0) { // к примеру если ниже максимума на 12 пунктов, в этом случае откроем SELL
ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,30,Ask+sl,Ask-tp,"My order",magic,0,Blue);
if(ticket>=0) Flag=false;// Ордер открылся, сегодня больше не открываем.
}
}
return(0);
}
Questa linea può essere rimossa o non funziona senza? Non capisco perché devo chiudere un ordine?
Naturalmente puoi rimuoverlo, è solo per testarlo e non per moltiplicare il numero di ordini aperti. Questo è solo un esempio di formazione di un EA. Non apre più di un ordine SELL al giorno. E nel tuo EA, dovresti decidere tu stesso come chiudere gli ordini: per stop loss, take profit o altre condizioni. L'ora 22:55 è scelta perché molte società di brokeraggio aumentano significativamente lo spread, specialmente il venerdì dopo le 23:00. Potreste pensare che dovremmo aprire più di un ordine al giorno. E questo è un esempio per un ordine piazzato su un lato. Dovremmo cercare il minimo per analogia. Questo codice come esempio, spero che faciliti la creazione del mio EA)
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
if (OrderMagicNumber() != i_magic) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderType() > 1) continue; // Все удалённые отложки нас не интересуют..if (lastOrderCloseTime < OrderCloseTime()) // Находим время закрытия..
lastOrderCloseTime = OrderCloseTime(); // ..последней закрытой позиции в историиif (MathAbs(OrderTakeProfit() - OrderOpenPrice()) < i_tp * pt) return(0); // ЗДЕСЬ ВЫХОДИМ ПРИ ПЕРВОМ ВСТРЕЧНОМ
lastOOTHist = OrderOpenTime(); // Тогда время открытия последней закрытой позиции из истории
}
In realtà, sì, ho dato una nuova occhiata questa mattina. Si scopre che il primo ordine, che ha più profitto di quello richiesto, dà un segnale per continuare la funzione (cioè non viene mancato) e poi, naturalmente, tutto sarà sbagliato.
Puoi dirmi come impostare l'ottimizzazione dell'Expert Advisor in modo che mostri anche i risultati di passaggi negativi?
Nella scheda con i risultati dell'ottimizzazione, cliccate con il tasto destro su qualsiasi risultato e deselezionate "non mostrare risultati inutili" (o qualcosa del genere).
Ciao!
Scusate se riprendo un argomento relativamente vecchio. Ho capito tutto con il codice.
Ora ho un rompicapo: come aprire uno scambio. Per esempio, subito dopo un dato intervallo, stiamo cercando
Il prezzo è inferiore al massimo di un certo numero di punti. Apriamo un accordo.
Ho provato ad aggiungere un codice del genere e ad eseguirlo nel tester, ma non apre gli accordi.
Cosa fare?
Questo dovrebbe funzionare, non l'ho testato io stesso, poiché il terminale è impegnato nell'ottimizzazione di un altro EA finora
Questo dovrebbe funzionare, non l'ho testato personalmente perché il terminale è impegnato nell'ottimizzazione di un altro EA
Questo dovrebbe funzionare, non l'ho testato personalmente perché il terminale è impegnato nell'ottimizzazione di un altro EA
Posso rimuovere questa linea o non funziona senza? Non capisco perché devo chiudere l'ordine?
Questa linea può essere rimossa o non funziona senza? Non capisco perché devo chiudere un ordine?
Naturalmente puoi rimuoverlo, è solo per testarlo e non per moltiplicare il numero di ordini aperti. Questo è solo un esempio di formazione di un EA. Non apre più di un ordine SELL al giorno. E nel tuo EA, dovresti decidere tu stesso come chiudere gli ordini: per stop loss, take profit o altre condizioni. L'ora 22:55 è scelta perché molte società di brokeraggio aumentano significativamente lo spread, specialmente il venerdì dopo le 23:00. Potreste pensare che dovremmo aprire più di un ordine al giorno. E questo è un esempio per un ordine piazzato su un lato. Dovremmo cercare il minimo per analogia. Questo codice come esempio, spero che faciliti la creazione del mio EA)
Ciao!
Sono uno stupido, ma voglio cambiare io stesso qualcosa nel codice...
Qualsiasi consiglio, se non vi dispiace il vostro tempo...
Ho alcune domande:
1. Come posso aggiungere una variabile "stop loss" al mio EA? Voglio essere in grado di cambiarla, ovviamente.
2. Come abilitare il mio EA ad aggiungere un commento per ogni mio trade?
3. Come aggiungere un EA con un numero magico?
Ciao!
Sono uno stupido, ma voglio cambiare io stesso qualcosa nel codice...
Qualsiasi consiglio, se non vi dispiace il vostro tempo...
Ho alcune domande:
1. Come posso aggiungere una variabile "stop loss" al mio EA? Voglio essere in grado di cambiarla, ovviamente.
2. Come abilitare il mio EA ad aggiungere un commento per ogni mio trade?
3. Come aggiungere un EA con un numero magico?
1. external double StopLoss=100.0;//aggiungere la variabile stop loss
2-3. int ticket=OrderSend(Symbol, TypeOfOrder,LotsOfOrder ,OpenPriceOfOrder,Slippage ,OpenPriceOfOrder+/-StopLoss,OpenPriceOfOrder-/+TakeProfit,YourMagicNumber,0, CLR_NONE) ;
4. LEGGI!
Ecco la canna:
Buon pomeriggio!
Puoi dirmi come impostare l'ottimizzazione dell'Expert Advisor in modo che mostri anche i risultati di passaggi negativi?
Buon pomeriggio!
Puoi dirmi come impostare l'ottimizzazione dell'Expert Advisor in modo che mostri anche i risultati di passaggi negativi?