[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 829

 
dimon74:
Könnte nützlich sein!!! Versuchen Sie, sich auf einen Preis zu stützen: z.B. Bieten. Der Eröffnungskurs für OP_SELLSTOP ist Bid und für OP_BUYSTOP - Bid+87*Point (oder was immer Sie benötigen).
Ich verstehe die Idee, danke!
 
Vinin:

Nun ein Magier, die Parameter sind eingestellt auf

Sehen Sie sich die private Nachricht an...
 

Bitte um Hilfe. Vielleicht weiß jemand, wie man eine Funktion in den Code implementiert, die den vorletzten Wert aus der Historie mit dem letzten vergleicht (wir reden hier über geschlossene Positionen), egal welchen Wert (z.B. OrderCloseTime()), und wenn sie unterschiedlich sind (in diesem Fall ist der vorletzte kleiner als der letzte) - eine BLA-BLA-BLA macht. Verfeinern Sie nach Möglichkeit meinen Code oder schreiben Sie Ihren eigenen, wenn er in die falsche Richtung geht.

double C_T_L_C_P() {

datetime t;

double r=0;

int i, k=OrdersHistoryTotal(), q=0;

if (q==0)

for (i=0; i<k; i++) {

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true) {

if (OrderType()==OP_BUY || OrderType()==OP_SELL) {

if (t<OrderCloseTime()) {r=OrderCloseTime();}

}}}

return (r);}

VIELEN DANK IM VORAUS!!!

 

Hilfe bei der Überprüfung.

Nach dem Erscheinen der ersten Einheit im Zyklus ist zu prüfen, ob diese Einheit für die Zeit t+t1 hält (Prüfung alle Delta-Sekunden). Wenn er hält, kaufen wir ihn, und wenn er irgendwann nicht mehr hält, verlassen wir die Schleife. Mit anderen Worten: Das Signal ist gültig, wenn es in jedem Delta-Intervall geprüft wurde und immer eins war.

Denke ich richtig?

if(sign0==1) //проверка начинаертя только после появления 1 
     {
      t=TimeCurrent();                                     //фиксируем время
                                                           //в цикле от t до t+t1 через каждые дельта секунд
       while(t<t+t1)                                       //t1 отрезок времени в перед за которое будем проверять if(sign0==1)
         {
            if(sign0==1)                                   //еще паз проверка наличия  1
              sign1=1;                                    //новой переменой присваиваем 1
            else
              {sign1=0;break;}                             // если нет присваиваем 0 и заканчиваем цикл
            t=t+delta;                                     //проверяем через каждые дельта секунд
         }
      if(sign1==1) op="BUY";
            return;
     }
 
gince:

Hilfe bei der Überprüfung.

Nach dem Erscheinen der ersten Einheit im Zyklus ist zu prüfen, ob diese Einheit für die Zeit t+t1 hält (Prüfung alle Delta-Sekunden). Wenn er hält, kaufen wir, und wenn er irgendwann nicht mehr hält, verlassen wir die Schleife.

Denke ich richtig?


Das Ergebnis ist eine unendliche while-Schleife (t ist immer <t+t1, nur wenn t1=0). In der Schleife ist sign1 immer =1
 
abolk:

Das Ergebnis ist eine unendliche while-Schleife (t ist immer <t+t1, nur wenn t1=0). In der Schleife ist sign1 immer =1

Wie kann der Fehler behoben werden?
 
gince:

Wie kann man einen Fehler korrigieren?

Um einen Fehler zu beheben, müssen Sie den Algorithmus (nicht den Code, sondern den Algorithmus) detailliert beschreiben. Und dann den Code über den Algorithmus legen
 
abolk:

Um den Fehler zu korrigieren, muss der Algorithmus detailliert werden

Es wird ein binäres Signal 0 oder 1 empfangen. Wenn eine 1 empfangen wird, wird ab diesem Moment alle 60 Sekunden geprüft, ob der Wert 10 Minuten (600 Sekunden) lang hält. Wenn alle 10 Minuten eine 1 stand, dann Kaufen, und wenn mindestens einmal keine 1 stand, dann die Prüfung beenden und davon ausgehen, dass es kein Signal zum Öffnen gibt.
 
gince:

Es wird ein binäres Signal 0 oder 1 empfangen. Wenn eine 1 empfangen wird, wird ab diesem Moment alle 60 Sekunden geprüft, ob sie für 10 Minuten (600 Sekunden) hält. Wenn alle 10 Minuten eine Eins waren - Kaufen, und wenn mindestens einmal keine Eins war, dann beenden Sie die Prüfung und gehen Sie davon aus, dass es kein Signal zur Eröffnung gibt.

Aus dem Code geht nicht hervor, wie sich das diskrete Signal sign0 ändert. In dem vorgestellten Code ändert sich das Signal nicht. Es gibt einen erfolglosen Versuch, mit geänderten Bedingungen zu arbeiten.
 
void CheckForOpen()
  {
   
   int    res;
   datetime t;
   int sign=0;
//---- go trading only for first tiks of new bar


  
  double tr0=iCustom(NULL,0,"trd",0,0);
  double tr1=iCustom(NULL,0,"trd",1,0); 
//---- sell conditions
   if(tr1==1)  
     {
      t=TimeCurrent();
       while(t<t+tim)
         {
            if(tr1==1)
              sign=-1;
            else
              {sign=0;break;}
            t=t+delta;
         }
      if(sign==-1) 
      res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGICMA,0,Red);
      return;
     }
Dieser Wert stammt aus Moving Average.mq4
Grund der Beschwerde: