Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1252

 
ANDREY:
Einen guten Tag an Sie alle!
Ich teste diesen Algorithmus im MT4-Tester mit mql4. Ich benötige die Print()-Funktion, um den Geldkurs in log mit 5 (fünf) Dezimalstellen auszugeben. Es würden aber nur 4 (vier) Dezimalstellen gedruckt. Bitte sagen Sie mir, wie ich meinen Fehler beheben kann, falls er existiert.
Hier ist mein Code.
void OnTick()
{
Print("=======Bid ======= ",NormalizeDouble(Bid,Digits) );

}


Wenn ich gleichzeitig mit Print() den Eröffnungs- und Schlusskurs der Order (nach SL und TP) ausdrucke , dann druckt Print() den Preis mit 5 (fünf) Stellen.
Ich danke Ihnen allen für Ihre Hilfe.

DoubleToString(), nicht NormalizeDouble()

 
Igor Makanu:

Ich habe dir gesagt, dass mir meine Entscheidung nicht gefällt (((

Zu faul, um wieder zu schreiben.

Googeln Sie "array find repetitions" - ich denke, Sie werden etwas finden

enum EResult{Ok,AllocError};

template<typename T>
EResult GetRepeat(const T &arr[],T &ret[],uint count){
   int size=ArraySize(arr);
   if (ArrayResize(ret,size)!=size) return AllocError;
   int ii=0;
   for (int i=0;i<size;){
      T tmp=arr[i];
      uint repeatCount=1;
      while(++i<size&&arr[i]==tmp) ++repeatCount;
      if (repeatCount>=count) ret[ii++]=tmp;}
   return ArrayResize(ret,ii)==ii?Ok:AllocError;
}

void OnStart()
{
   int arr[]={1,2,4,4,4,55,55,7,7,7,7,7,8,9,77,66,66,66};
   int ret[];
   if (!GetRepeat(arr,ret,3)) ArrayPrint(ret);
} 
 
Artyom Trishkin:

DoubleToString(), nicht NormalizeDouble()

Herzlichen Dank für Ihre informative Unterstützung.

 
Liebe Kolleginnen und Kollegen, wenn es Ihnen nicht zu viel Mühe macht, prüfen Sie bitte meine Frage.
https://www.mql5.com/ru/forum/160683/page1251#comment_18219493
Wie erkenne ich insbesondere den Wert der Minute, zu der die Position offen ist?
 
Aleksey Masterov:
Wie finden Sie den Wert der Minute, in der eine Position offen ist?

TimeToStruct() verwenden

https://www.mql5.com/ru/docs/dateandtime/timetostruct

 
Igor Makanu:

TimeToStruct() verwenden

https://www.mql5.com/ru/docs/dateandtime/timetostruct

Ja, ich habe es auf mt4
 
Aleksey Masterov:
Ja, ich habe es auf mt4

es funktioniert in MT4

 
Igor Makanu:

es funktioniert in MT4

Ich verstehe immer noch nicht, wie ich den Wert der Minute, in der einePosition eröffnet wurde, aus dieser Struktur erhalten kann...
 
Aleksey Masterov:
Ich verstehe nicht, wie ich den Wert von Minute erhalten kann, wennPosition von dieser Strukturgeöffnet wurde, die Trompete zurückgibt...

datetime o_open = OrderOpenTime();

MqlDateTime dt_struct;

TimeToStruct( o_open, dt_struct;)

int min = dt_struct.min;

 

Wenn Sie mir helfen können, zu verstehen, was falsch ist, wenn ich versuche, Indikatorpufferdaten zu lesen.

Hier ist der Code des EA:

      if (IsTesting())
         {
         Trend    = GlobalVariableGet(GV_tradesTrend);
         TrendUP  = iCustom(NULL,0,"Used\\# Once Trades Trend",3,0);
         TrendDN  = iCustom(NULL,0,"Used\\# Once Trades Trend",4,0);
         if (TrendUP>0) {Trend=1; GlobalVariableSet(GV_tradesTrend,1);}
         if (TrendDN>0) {Trend=-1;GlobalVariableSet(GV_tradesTrend,-1);}
         if (Trend==1)  {GlobalVariableSet(GV_Trend,1);}
         if (Trend==-1) {GlobalVariableSet(GV_Trend,-1);}
         if (Trend==0)  {GlobalVariableSet(GV_Trend,0);}
         }
      else
         {
         Trend = GetLastTrendChange();
         if (Trend==1)  {GlobalVariableSet(GV_Trend,1);}
         if (Trend==-1) {GlobalVariableSet(GV_Trend,-1);}
         if (Trend==0)  {GlobalVariableSet(GV_Trend,0);}
         }
//+----------------------------------------------------------------------------+
int GetLastTrendChange()
   {
   int   trendType=0;
   int   y=0;
   int   t=500;
   while (y<t)
      {
      if (iOpen(NULL,0,t)==y) {return(0);}
      trendType=FindTrendChange(y);
      if (trendType==1 || trendType==-1) {return(trendType);}
      y++;
      }
   return(0);
   }
//+----------------------------------------------------------------------------+
int FindTrendChange(int index)
   {
   double   trendUP,trendDN;
   int      trendType=0;
   trendUP = iCustom(NULL,0,"Used\\# Once Trades Trend",3,index);
   trendDN = iCustom(NULL,0,"Used\\# Once Trades Trend",4,index);
   if (trendUP>0) {trendType=1;}
   if (trendDN>0) {trendType=-1;}
   return (trendType);
   }
//+----------------------------------------------------------------------------+

In der Praxis und in Tests funktioniert die Suche nach dem letzten Wert über die Funktion, aber der Test ist katastrophal langsam (ein halbjähriger Test dauert mehrere Tage).

Also beschloss ich, Swap on Test zu verwenden und den letzten Wert in einer globalen Variable zu speichern - der Expert Advisor sah keine Pufferdaten mehr. Und obwohl leere Puffer 0 sind, nehmen die Variablen von EA aus irgendeinem Grund EMPTY_VALUE-Werte an und ändern sich nicht.

comm

Aber wenn ich den Cursor über die Pufferzeile im Datenfenster bewege, erscheinen zwei Werte in der QuickInfo, und der erste Wert ist 0, zum Beispiel Wert 5; 0,0000; 0,8855.

Ich kann es nicht herausfinden, obwohl ich im Code des Indikators herumstochere. Die Suche im Internet und in der Dokumentation hat nicht geholfen. Kann mir jemand sagen, warum der Test so langsam ist, wenn ich versuche, diesen Indikator zu verwenden?

Bitte helfen Sie mir!

Dateien:
Grund der Beschwerde: