WIE man einen Programmierer dazu bringt, sich zu 100% für das Schreiben eines EAs auf der Grundlage Ihrer IDEA zu interessieren - Seite 11

 

Oder organisieren Sie eine einstellbare Take-Profit-Einstellung in diesem EA.

Hier ist der vollständige Code.

 
//+------------------------------------------------------------------+
//|                                                         Gray.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
 
extern double lot=1;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  int tiket=0;
//----
if (iVolume(NULL,0,0)==1){
    Print("WATR1="+iCustom( NULL, 0, "WATR", 0, 0) );
    Print("WATR2="+iCustom( NULL, 0, "WATR", 1, 0) );
    
    if (iCustom( NULL, 0, "WATR", 0, 2)<1000 && iCustom( NULL, 0, "WATR", 1, 1)<1000) {tiket =OrderSend(Symbol(),OP_SELL,lot,Bid,3,iCustom( NULL, 0, "WATR", 1, 0),0,NULL,16384,0,Red);}
    if (iCustom( NULL, 0, "WATR", 1, 2)<1000 && iCustom( NULL, 0, "WATR", 0, 1)<1000) {tiket= OrderSend(Symbol(),OP_BUY,lot,Ask,3, iCustom( NULL, 0, "WATR", 0, 0),0,NULL,16384,0,Green);}
    CheckOrders();
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
}
void CheckOrders(){
int pos=0;
int total=OrdersTotal();
for (pos=0;pos<total;pos++) {
if (OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==true){ 
if (OrderType()==OP_BUY && OrderStopLoss()<iCustom( NULL, 0, "WATR", 0, 1))OrderModify(OrderTicket(),OrderOpenPrice(),iCustom( NULL, 0, "WATR", 0, 1),OrderTakeProfit(),0,Green);
if (OrderType()==OP_SELL && OrderStopLoss()>iCustom( NULL, 0, "WATR", 1, 1))OrderModify(OrderTicket(),OrderOpenPrice(),iCustom( NULL, 0, "WATR", 1, 1),OrderTakeProfit(),0,Red);
                                                                                   }
                                                          }
                                      }
 
Ultramarin:

Oder organisieren Sie eine einstellbare Take-Profit-Einstellung in diesem EA.

Hier ist der vollständige Code.

Haben Sie es ausprobiert?
 
Registr:
Ultramarin:

Oder organisieren Sie eine einstellbare Take-Profit-Einstellung in diesem EA.

Hier ist der vollständige Code.

Haben Sie versucht zu arbeiten?
Wenn dies der vollständige EA-Code ist, dann hat Registr Ihnen den besten Rat gegeben.
 

Ich kann jetzt ein paar Bemerkungen hinzufügen

1. Der zur Startfunktion gehörende return(0) -Operator sollte zumindest unter einer geschweiften Klammer verdoppelt werden. Da sie nur ausgeführt wird, wenn die Bedingung für das Volumen von 1 erfüllt ist.

In der übrigen Zeit sollte die Startfunktion nicht korrekt geschlossen werden.

die 2 Bedingungen des Wertes aus dem aufgerufenen Indikator <1000 ist wahrscheinlich die Idee, um zu zeigen, dass es auf dem Balken keinen Wert aus den Puffern gibt

d.h. eine Art Kreuzung (Änderung der Farbe des Indikators und seiner relativen Position im Verhältnis zum aktuellen Kurs)

Ich fürchte, dass es in diesem Fall nur für die Symbole mit dem aktuellen Preiswert größer als 1000 (z.B. PDR) funktionieren wird.

wenn der Indikator nur eine Farbe auf dem aktuellen Balken zeichnet (der Wert eines anderen Puffers auf diesem Balken ist 0)

Andernfalls wird bei fast jedem Währungspaar der aktuelle Wert des Indikators immer unter 1000 liegen, und die Bedingungen werden bei jedem Balken ausgelöst

3. ich empfehle, den Zustand einer neuen Bar wie folgt zu nehmen


int time;
 
int start
   {
      if (time!=Time[1])
         {
            // расчет индикатора и выполение действий с ордерами
            //-----
            //-----
            //-----
            //-----
            time=Time[1];
 
         }
       return(0);
   }



 
olyakish:

Ich kann jetzt ein paar Bemerkungen hinzufügen

1. Der zur Startfunktion gehörende return(0)-Operator sollte zumindest unter einer geschweiften Klammer verdoppelt werden. Da sie nur ausgeführt wird, wenn die Bedingung für das Volumen von 1 erfüllt ist.

In der übrigen Zeit sollte die Startfunktion nicht korrekt geschlossen werden.

die 2 Bedingungen des Wertes aus dem aufgerufenen Indikator <1000 ist wahrscheinlich die Idee zu zeigen, dass auf dem Balken gibt es keine einen Wert aus den Puffern

d.h. eine Art Kreuzung (Änderung der Farbe des Indikators und seiner relativen Position im Verhältnis zum aktuellen Kurs)

Ich fürchte, dass es in diesem Fall nur für die Symbole mit dem aktuellen Preiswert größer als 1000 (z.B. PDR) funktionieren wird.

wenn der Indikator nur eine Farbe auf dem aktuellen Balken zeichnet (der Wert eines anderen Puffers auf diesem Balken ist 0)

Andernfalls wird bei fast jedem Währungspaar der aktuelle Wert des Indikators immer unter 1000 liegen, und die Bedingungen werden bei jedem Balken ausgelöst

3. ich empfehle, den Zustand einer neuen Bar wie folgt zu nehmen


Sagen Sie ihm lieber, welche Tasten er drücken muss... :)
 

Oh, und noch etwas.

4. Das 12-malige Aufrufen des benutzerdefinierten Indikators ist zumindest Blasphemie :)

in Ihrem Fall reichen 6 Mal aus (ich habe so viele Male gezählt)

Die Verarbeitungsgeschwindigkeit Ihres EAs wird meiner Meinung nach nicht um das Doppelte, sondern um das 1,5-fache steigen. Diese Maßnahmen sind nur (Code-Optimierung), nicht zu verwechseln mit der Optimierung der Parameter


//+------------------------------------------------------------------+
//|                                                         Gray.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        https://www.metaquotes.net |
//|                                   обработал напильником olyakish |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "https://www.metaquotes.net"
 
extern double lot=1;
extern string rem01="Профит в пунктах от текущей цены";
extern int TP=100;
 
int time;
double WATR[2,3];// первое измерение - индекс буфера; второе измерение - индекс бара 
 
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int tiket=0;
 
   if (Time[1]!=time)
      {
         WATR[0,0]=iCustom( NULL, 0, "WATR", 0, 0);
         WATR[1,0]=iCustom( NULL, 0, "WATR", 1, 0);
         WATR[0,1]=iCustom( NULL, 0, "WATR", 0, 1);
         WATR[1,1]=iCustom( NULL, 0, "WATR", 1, 1);
         WATR[0,2]=iCustom( NULL, 0, "WATR", 0, 2);
         WATR[1,2]=iCustom( NULL, 0, "WATR", 1, 2);         
         Print("WATR1=",WATR[0,0]);
         Print("WATR2=",WATR[1,0]);
    
         if (WATR[0,2]>0 && WATR[1,1]>0) // проверить это место (правильно ли будет направелние  открытия по индикатору)
            {
               tiket= OrderSend(Symbol(),OP_BUY,lot,Ask,3,WATR[0,0],Bid+TP*Point,NULL,16384,0,Green);
            }
         if (WATR[1,2]>0 && WATR[0,1]>0) // проверить это место (правильно ли будет направелние  открытия по индикатору)
            {
               tiket =OrderSend(Symbol(),OP_SELL,lot,Bid,3,WATR[1,0],Ask-TP*Point,NULL,16384,0,Red);                           
            }
         CheckOrders();
         time=Time[1];
      }
   return(0);
  }
//+------------------------------------------------------------------+
void CheckOrders()
   {
      int pos=0;
      int total=OrdersTotal();
      for (pos=0;pos<total;pos++) 
         {
            if (OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==true)
               { 
                  if (OrderType()==OP_BUY && OrderStopLoss()<WATR[0,1]){OrderModify(OrderTicket(),OrderOpenPrice(),WATR[0,1],OrderTakeProfit(),0,Green);}
                  if (OrderType()==OP_SELL && OrderStopLoss()>WATR[1,1]){OrderModify(OrderTicket(),OrderOpenPrice(),WATR[1,1],OrderTakeProfit(),0,Red);}
               }
         }
      return(0);  // на самом деле нужно просто return но так вроде писать нельзя ...
    }
//+------------------------------------------------------------------+

Zumindest so

Siehe



 
Leider klappt das nicht.
 

Kann jemand erklären

Es gibt zwei identische EAs mit absolut identischen Parametern

Einer kauft zur gleichen Zeit, ein anderer verkauft zur gleichen Zeit

Eintritts- und Austrittszeitpunkt sind identisch

Wie können sie beide sauber verschwinden?

 
Ultramarin:

Wie können sie beide sauber zusammengeführt werden?

Über die Verbreitung.
Grund der Beschwerde: