Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 105

 
Forexman77:


Hallo!

Entschuldigung, dass ich ein relativ altes Thema aufgreife. Ich habe alles mit dem Code verstanden.

Jetzt habe ich ein Rätsel, wie ich einen Handel eröffnen kann. Zum Beispiel suchen wir direkt nach einem bestimmten Bereich nach

Der Preis ist um eine bestimmte Anzahl von Punkten niedriger als der Höchstpreis. Wir eröffnen ein Geschäft.

Ich habe versucht, einen solchen Code hinzuzufügen und ihn im Prüfprogramm auszuführen, aber er öffnet keine Angebote.

Was ist zu tun?

Das sollte funktionieren, ich habe es nicht selbst getestet, da das Terminal bisher mit der Optimierung eines anderen EA beschäftigt ist

#define magic 123456789
extern int StartHour=16;
extern int StartMinute=1;
extern int StopHour=17;
extern int 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(){
 static double 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.1970
 if(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.1970
  int start= iBarShift(Symbol(),PERIOD_M1,ts,false);// смещение бара, которому принадлежит ts
  ts=td+StopTime*60;// конец временного диапазона в секундах от 01.01.1970
  int 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);
}
 
Sepulca:

Dies sollte funktionieren, ich habe es nicht selbst getestet, da das Terminal damit beschäftigt ist, einen anderen EA zu optimieren

Ich danke Ihnen!
 
Sepulca:

Dies sollte funktionieren, ich habe es nicht selbst getestet, da das Terminal damit beschäftigt ist, einen anderen EA zu optimieren


// В 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;
Kann ich diese Zeile entfernen oder funktioniert es ohne sie nicht? Ich verstehe nicht, warum ich die Bestellung abschließen muss?
 
Forexman77:

Kann diese Zeile entfernt werden oder funktioniert es ohne sie nicht? Ich verstehe nicht, warum ich eine Bestellung abschließen muss?

Natürlich können Sie es entfernen, es dient nur zum Testen und nicht zur Vervielfachung der Anzahl der offenen Aufträge. Dies ist nur ein Übungsbeispiel für einen EA. Es wird nicht mehr als ein SELL-Auftrag pro Tag eröffnet. Und in Ihrem EA sollten Sie selbst entscheiden, wie Sie Aufträge schließen: durch Stop Loss, Take Profit oder andere Bedingungen. Die Zeit 22:55 Uhr wurde gewählt, weil viele Brokerfirmen die Spreads deutlich erhöhen, vor allem freitags nach 23:00 Uhr. Sie sind vielleicht der Meinung, dass wir mehr als eine Bestellung pro Tag öffnen sollten. Und dies ist ein Beispiel für einen Auftrag, der auf einer Seite platziert wurde. Wir sollten in Analogie dazu nach dem Minimum suchen. Dieser Code als Beispiel, ich hoffe, es wird die Erstellung meiner eigenen EA erleichtern)
 

Hallo!

Ich bin ein Dummkopf, aber ich möchte selbst etwas am Code ändern...

Wenn Sie mir einen Rat geben können, dann bitte...

Ich habe ein paar Fragen:

1. Wie füge ich meinem EA einen variablen "Stop Loss" hinzu? Ich möchte ihn natürlich ändern können.

2. Wie kann ich meinem EA ermöglichen, einen Kommentar für jeden meiner Trades hinzuzufügen?

3. Wie füge ich eine Magic-Nummer zu meinem EA hinzu?

 
K-o-t:

Hallo!

Ich bin ein Dummkopf, aber ich möchte selbst etwas am Code ändern...

Wenn Sie mir einen Rat geben können, dann bitte...

Ich habe ein paar Fragen:

1. Wie füge ich meinem EA einen variablen "Stop Loss" hinzu? Ich möchte ihn natürlich ändern können.

2. Wie kann ich meinem EA ermöglichen, einen Kommentar für jeden meiner Trades hinzuzufügen?

3. Wie kann man einen EA mit einer magischen Zahl hinzufügen?

1. external double StopLoss=100.0;//Stop-Loss-Variable einfügen

2-3. int ticket=OrderSend(Symbol, TypeOfOrder,LotsOfOrder ,OpenPriceOfOrder,Slippage ,OpenPriceOfOrder+/-StopLoss,OpenPriceOfOrder-/+TakeProfit,YourMagicNumber,0, CLR_NONE) ;

4. LESEN!

 
artmedia70:

Hier ist der Laden:

 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();   // Тогда время открытия последней закрытой позиции из истории
   }
Ja, ich habe heute Morgen einen neuen Blick darauf geworfen. Es stellt sich heraus, dass die erste Bestellung, die mehr Gewinn als erforderlich ist, gibt ein Signal, um die Funktion fortzusetzen (dh nicht verpasst) und dann, natürlich, alles falsch sein wird.
 

Guten Tag!

Können Sie mir sagen, wie ich die Optimierung des Expert Advisors so einrichten kann, dass er auch negative Pass-Ergebnisse anzeigt?

 
filpan:

Guten Tag!

Können Sie mir sagen, wie ich die Optimierung des Expert Advisors so einrichten kann, dass er auch negative Pass-Ergebnisse anzeigt?

Klicken Sie auf der Registerkarte mit den Optimierungsergebnissen mit der rechten Maustaste auf ein beliebiges Ergebnis und deaktivieren Sie die Option "Unbrauchbare Ergebnisse nicht anzeigen" (oder so ähnlich).
 
Ich habe es gefunden, danke!