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

 
bercut0077:
Guten Tag, es ist ein Indikator, aber in der Tester nach einem bestimmten Zeitraum von Anfang des Jahres bis März funktioniert und dann aufhört, Signale zu geben, und ich brauche, um einen langen Zeitraum (AuthorizedSSBODynamicBreakoutBoxFinalEdition) zu testen, wo im Code kann diese Einschränkung sein - bitte geben Sie zumindest einen Hinweis, wo zu graben, welche Betreiber bestimmen es?
Gelegentlich kommt es zu Störungen. Es hört einfach auf, das Feld zu zeichnen. Es gibt nirgendwo eine Einschränkung. Testen Sie die potikovo. Manchmal hilft das.
 
Sepulca:
Haben Sie den Quellcode des Indikators? Wenn nicht, suchen Sie nach dem Autor))))

Ich habe den Quellcode - es ist ein Chaos.
 
Nein, dann werde ich es gar nicht erst versuchen. Manchmal verirrt man sich in seinem eigenen Code, ganz zu schweigen von dem eines anderen))))
 

Wie sagen Sie mir bitte einige bewährte Expert Advisor in MQL4 und 5, und die Zeit ist sehr kurz, manchmal müssen Sie eine Idee zu überprüfen oder jemandem helfen, endlich eine Grundlage für den Roboter zu schaffen und zu beenden, es selbst zu schreiben ...

Ich wäre Ihnen sehr dankbar, vielen Dank im Voraus!!! =)

 
vadynik:

Ich schreibe eine Funktion wie diese

Aber warum gibt OrderOpenPrice() den auf vier Stellen gerundeten Preis auf den fünf Stellen zurück?


int i, k=OrdersTotal();

  for (i=k-1; i>=0; i--) 
   {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
     {                
       if ((OrderType()==OP_BUY)&&(OrderOpenPrice()>=Ask-350*Point)&&(OrderMagicNumber()==Magic)||(OrderType()==OP_BUY)&&(OrderOpenPrice()<=Ask+250*Point)&&(OrderMagicNumber()==Magic))
         {
           double o=OrderOpenPrice();
           Print(o);
           OrderClose(OrderTicket(),OrderLots(),Bid,50,Blue); 
         
      }
    }
  }
Versuchen Sie, dies zu tun, und sehen Sie, was OrderOpenPrice() wirklich zurückgibt. Vielleicht liegt es daran, dass Sie die Funktion mit dem Parameter Digits normalisieren und Sie im Drucker nicht das sehen, was es wirklich ist.
 
vadynik:

Ich schreibe eine Funktion wie diese

Aber warum gibt OrderOpenPrice() den auf vier Dezimalstellen gerundeten Preis zurück?

Print gibt in diesem Fall keinen gerundeten Preis zurück, sondern nur die Standardanzahl der Dezimalstellen.
In der Tat, Forex arbeitet nicht mit Dezimalstellen, die niedriger als Ziffern sind. In der Regel, mit dem Beispiel der EURSD ist es nur vier Dezimalstellen, und auch die fünfte Dezimalstelle ist eine Idee von Brokerage-Unternehmen.

Aber in Ihrem Fall ist es besser, so vorzugehen: Print(DoubleToStr(OrderOpenPrice(),Digits));

 
Ekburg:

Versuchen Sie, dies zu tun, und sehen Sie, was OrderOpenPrice() wirklich zurückgibt. Vielleicht liegt es daran, dass Sie die Funktion mit dem Parameter Digits normalisieren und Sie im Drucker nicht das sehen, was es wirklich ist.

Es ist das gleiche ohne Normalisierung, ich muss Punkte vom Eröffnungskurs subtrahieren, wenn so der Preis ist, was ich brauche, aber dann bekomme ich eine Typ-Fehlanpassung in IF(
Print(DoubleToStr(OrderOpenPrice(),Digits));
 
vadynik:

Ich muss Punkte vom Eröffnungskurs abziehen, und wenn dies der Fall ist, ist der Preis derjenige, den ich brauche, aber dann erhalte ich eine Typinkongruenz in IF (

Rechnen Sie vierstellig. Wenn Sie Wert auf Genauigkeit legen, setzen Sie den Wert der letzten Stelle ein, da er sich während der Berechnungen aufgrund der Art der Berechnungen nicht ändert.
 
Ekburg:

Führen Sie die Berechnungen wie für vier Ziffern durch, und wenn Ihnen die Genauigkeit wichtig ist, dann geben Sie sie an Ort und Stelle zurück, mit dem Wert der letzten Ziffer, der früher war, weil er sich während der Berechnungen nicht ändert, aufgrund der Besonderheiten der Berechnungen.
Die Normalisierung wird nur in Ordersend, orderclose usw. gut gebraucht und noch beim Vergleich der realen Werte und in den Druckern geben die beliebige Zahl der Zeichen nach dem Dezimalpunkt an. Wenn Sie aber einfach Print(was_double_value) schreiben, werden in der Regel vier Dezimalstellen ausgegeben. Die korrekte Vorgehensweise ist daher, Folgendes zu schreiben
Print(DoubleToStr(OrderOpenPrice(),Digits));

Wie bereits erwähnt, konvertieren Sie zunächst double in einen String mit der angegebenen Anzahl von Dezimalstellen und drucken ihn dann mit Print.... in ein Protokoll.
 
Und wenn Punkte berechnet werden, dürfen Sie diese nicht mit Punkten verwechseln. Sagen wir, doppelte SPRED=Ask-Bid-Punkte, oder sogar doppelte SPRED=(Ask-Bid)/Punkte.