[ARCHIV]Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Ohne dich kann ich nirgendwo hingehen - 5. - Seite 282

 
Zhunko:

Sie müssen sich aus Zecken bilden. Der Periodenkonverter macht das Minimum aus Minuten.


Kovalevs ist korrekt. Ich habe in rot hervorgehoben, was Sie nicht haben.

Ich hab's. Danke vielmals.
 
MauzerVII:

Leute, helft mir.

Ich verstehe nicht, warum die Zeile

Ergebnis: 2013.04.12 17 13 Druck_v4 EURUSD,M15: SL == 1.3068

vier Dezimalstellen ausgibt?

Ich bin mitDoubleToStr vertraut.



Wenn Sie sich dessen bewusst sind, was ist dann die Frage, die ich nicht verstehe?

 

Frage zum Code des Zeckensammlers in Kodobase. Irgendeine seltsame Prüfung auf Bedingungen, die in der Kopfzeile von booleschen Variablen zugewiesen werden, die sich im weiteren Verlauf des Codes nicht ändern. Ich verstehe nicht, wie das funktioniert.

//в шапке
           bool tick.time.local        =               false;
           bool tick.chart.update      =                true;
//в init()
   if(tick.chart.update == true)
     {
     if(MT4InternalMsg == 0)  
            {
            MT4InternalMsg = RegisterWindowMessageA("MetaTrader4_Internal_Message"); 
            }   
     }  
//в start()
     if(tick.time.local == true)//где менялось, я вообще не понял
       {
       time = TimeLocal();
       }
       else{
       time = TimeCurrent();
       }
//--------------------------------
       if(tick.chart.update == true)
         {
                   hwnd = WindowHandle(sn, 1);
         if(PostMessageA(hwnd, WM_COMMAND, 0x822c, 0) == false)
           {
           hwnd = 0;
           return;
           }
           PostMessageA(hwnd, MT4InternalMsg, 2, 1);             
           }                 
         } 

Der Wert der zugewiesenen booleschen Variablen ändert sich nirgendwo in den Bedingungen (und auch nicht im Code). Außerdem prüft start(), ob die zugewiesene Variable überhaupt den umgekehrten Wert hat. Aber es funktioniert. Wie?

 

Oder handelt es sich nur um nicht optimierten Code? GetLastError() wird in der Kopfzeile deklariert

#import "ntdll.dll"
 int RtlGetLastWin32Error();
 int RtlSetLastWin32Error (int dwErrCode);

Und diese NaiveAPI-Funktionen werden nirgendwo sonst im Code verwendet...

 

Liebe Programmierer, sagen Sie mir, wie ich ein "einfaches" Problem lösen kann.

Ich muss zum Beispiel die zweite Zeile einer CSV-Datei löschen. Ich konnte in der Dokumentation keine Informationen darüber finden, wie man das macht.

Beispiel:

12:30;1;1.34818;12:32;3;3;100;1.34939;18:45\r\n

14:00;1;1.32219;14:26;6;6;100;0.0000;00:00\r\n

19:00;0;1.35828;19:12;12;6;600;1.37939;19:59\r\n

 
tuner:


Ich würde gerne, aber ich habe keine Zeit, über etwas anderes nachzudenken, tut mir leid.

Bezüglich der Frage, wo sie gewechselt werden. Ich vermute, dass es sich dabei um Debug-Flags handelt, die der Programmierer beim Schreiben des Indikators verwendet und zur Fehlersuche im Code belassen hat, falls jemand sie benötigt.

 

Das Fazit ist einfach. Der schnelle Schwung kreuzt den langsamen Schwung. Dann rollt der Preis zurück auf den schnellen Kurs und der Expert Advisor sollte eine Order eröffnen.

Im Moment habe ich die Funktion zur Fixierung des Pullbacks wie folgt geschrieben:

//+-------------------------------------------------------------------------------------+
//| Получение значений МА на указанном баре                                             |
//+-------------------------------------------------------------------------------------+
double GetMA(int index, int maPeriod)
{
   return (iMA(NULL, i_TF, maPeriod, 0, MODE_EMA, MODE_CLOSE, index));
}
//+-------------------------------------------------------------------------------------+
//| Имеет ли место отскок?                                                              |
//+-------------------------------------------------------------------------------------+
void IsRebound(int crossDir[], bool& returnSign[])
{
   for (int i = 0; i < 4; i++)
   {
      if (crossDir[i] == CROSS_NO)
         continue;

      returnSign[i] = false;
      double ema = GetMA(1, g_maPeriod[i]);

      if (crossDir[i] == CROSS_UP)
      {
         if (ND(MathAbs(ema - Ask)) <= i_thresholdFromMa * pt) // ..зазор между ценой покупки и машки, <= i_thresholdFromMa..
         {
            returnSign[i] = true;
            Alert("CROSS_UP");
         }
      }
      if (crossDir[i] == CROSS_DN)
      {
         if (ND(MathAbs(ema - Bid)) <= i_thresholdFromMa * pt) // ..зазор между ценой покупки и машки, <= i_thresholdFromMa..
         {
            returnSign[i] = true;
            Alert("CROSS_DN");
         }
      }
   }
}

Ist dies richtig? Oder sollte es anders gemacht werden?

Das ArraycrossDir[] speichert Werte über das Vorhandensein eines Crossovers. Wenn es einen gibt, wird der Abstand zwischen dem aktuellen Kauf- oder Verkaufspreis und dem Wert der Maske geprüft. Aus irgendeinem Grund ist die Bedingung nicht erfüllt.

Ich brauche Folgendes:

Rückverfolgung

Sobald ein Armband die Marke von 365 überschritten hat und der Preis auf das entsprechende Armband zurückgeht, das die Marke von 365 überschritten hat, kaufen Sie. WIE KANN ICH DAS FREIGEBEN?

 

Zeichnen Sie eine Art logisches Diagramm von dem, was Sie wollen. Für Sie selbst.

Ein Jahr besteht aus etwa 250 Tagestakten.

 
Hat das noch niemand umgesetzt. Ich glaube nicht, dass es sehr kompliziert ist. Ich habe einfach noch nicht viel Erfahrung, ich verstehe nicht ganz, wie man diesen Punkt formalisieren kann ...
 
hoz:
Hat das noch nie jemand gemacht. Ich glaube nicht, dass das sehr schwierig ist. Ich habe einfach noch nicht viel Erfahrung, ich verstehe nicht ganz, wie man diesen Punkt formalisieren kann ...

Sie könnten das in einem Flussdiagramm tun. Sie könnten auch etwas anderes tun, aber auf eine sehr gründliche und eindeutige Weise. Damit ich Sie nicht wegen der Unvereinbarkeit der Idee mit ihrer Beschreibung verklagen kann.

Ich werde es nicht tun.

Grund der Beschwerde: