AutoGraf Series 4 - MQL-Funktionen. - Seite 33

 

Meine Damen und Herren!

Bitte beantworten Sie eine Frage.

Wie und wo im Code sollten Sie externe Variablen benennen?

Aus dem obigen Beispiel geht das nicht eindeutig hervor.

//================================================================================== 4 ==
   double AT[33];                                  // Массив для внешних переменных
   bool New_Parametr = false;                      // Обновления параметров пока не было
   for (int i=0; i<=32; i++)                       // Поищем обновлённый параметр
      {                                            // Если какой-то параметр обновлён..
      if(NormalizeDouble(AT[i], 8) !=  NormalizeDouble(Instrument[0][0][i][0],8))
         {
         New_Parametr = true;                      // .. запоминаем этот факт..         
         for (i=0; i<=32; i++)                     // .. то присвоим новые значения всем
            AT[i] = Instrument[0][0][i][0];        // Для удобства пользования
         break;                                    // .. и выходим из цикла перебора
         }
      }
//================================================================================== 5 ==
   int Strategy = NormalizeDouble(AT[0],0);
   switch(Strategy)
      {

Wie kann ich erreichen, dass externe Variablen in den Einstellungen der Anwendung nicht als AT_1...AT_32 entpersonalisiert werden, weil man sich nicht merken kann, wofür die einzelnen Zahlen stehen?

 

Die Werte der externen Variablen für Strategien werden (ebenso wie die Werte der externen Variablen) in den Einstellungen des Expert Advisors festgelegt.

Sie können die Namen der externen Variablen im Expert Advisor nicht ändern, da sie im Code des Expert Advisors AG_exp.ex4 geschrieben werden.

Die Namen der externen Variablen aus dem Expert Advisor werden über das Array Instrument an die angehängte Datei der Strategie übergeben.

Die Namen der lokalen Variablen in der Strategie, die den externen Variablen im Expert Advisor entsprechen, können in der Strategie geändert werden.

Dies ist in diesem Beispiel der Fall:

AT[i] = Instrument[0][0][i][0];        // Для удобства пользования

Sie können Ihre eigenen Namen angeben, wenn Sie dies wünschen.

Anstelle von AT[i] können Sie beispielsweise Alfa, Beta usw. angeben.

Array Instrument [][][]: http://autograf.dp.ua/Pages/2/26/267/2676.htm
Strategien in AG_AT(): http://autograf.dp.ua/Pages/2/26/267/26711/26711_1.htm
Strategien zur Befestigung: http://autograf.dp.ua/Pages/2/26/267/26711/26711_2.htm
Beispiele für Kodierungsstrategien:
http://autograf.dp.ua/Pages/2/26/267/26712/26712_1.htm
и http://autograf.dp.ua/Pages/2/26/267/26712/26712_2.htm

 

Jetzt verstehe ich. Ohne jegliche Programmiererfahrung verstehe ich das nicht auf Anhieb. Ich danke Ihnen.

Если программно, то можно воспользоваться функцией ObjectDelete() или ObjectsDeleteAll().

Und wo sollte ich sie in meiner Strategie unterbringen? Oder werden die Objekte jedes Mal, wenn die benutzerdefinierte Funktion aufgerufen wird, erstellt und gelöscht?

 
LeonidSB писал(а) >>

Jetzt verstehe ich. Ohne jegliche Programmiererfahrung verstehe ich das nicht auf Anhieb. Ich danke Ihnen.

Und wo sollte ich sie in meiner Strategie unterbringen? Oder werden die Objekte bei jedem Aufruf der Benutzerfunktion erstellt und gelöscht?

Sie muss nicht in einer Benutzerfunktion oder in einer Strategie vorgeschrieben sein.

Erstellen Sie ein einfaches separates Skript. Nachdem Sie die Strategie ausgeschaltet haben, werfen Sie sie ins Fenster, dann werden alle unnötigen Dinge gelöscht.

(in AG 5 werden wir eine Art Deinit in der Strategie vornehmen müssen; aber die Lösung wird von den Möglichkeiten von MQL5 abhängen)

 

Danke für den guten Rat. Nur du überschätzt mich. Ich habe mich noch nicht mit Skripten beschäftigt, aber ich werde in diese Richtung gehen. Wenn möglich, geben Sie mir bitte einen Link zu einem Analogon.

Ich habe mich bisher nur mit dem Indikator vertraut gemacht.

Ich habe TD_Points&Line_mgtd1.1.mq4 von Vladislav Goshkov (VG) als Analogie genommen, log.mq4 Copyright © 2006, komposter zur Berichterstellung hinzugefügt und mehr als 2 000 Zeilen meines Indikators erhalten.

Ich habe seinen Plan gemacht. Sie umfasst etwa 500 Zeilen. Ich werde es vielleicht zerschneiden, aber für den Moment ist es in Ordnung.

Nach Symbol

// --- // ---

sind die ausgeschnittenen Stellen.

Im Moment habe ich die Struktur im Kopf, ich möchte also die gewünschte Funktionalität erreichen. Dann werden wir alles nach den Regeln durchkämmen (die Kosten der Qualität sind geometrisch progressiv).

Nun, es gibt keine Zeile 521 im SRC: "Text ist größer als erlaubt". Wir müssen die Datei anhängen

Dateien:
 

In dieser Phase müssen Sie sich mit den speziellen Funktionen und Anwendungsarten vertraut machen.

Am besten nehmen Sie das MQL4-Lehrbuch zur Hand und lesen es von Anfang an, eins nach dem anderen. Wenn Sie Fragen haben, stellen Sie sie, ich werde versuchen, sie zu beantworten.

 
SK. >> :

In dieser Phase müssen Sie sich mit den speziellen Funktionen und Anwendungsarten vertraut machen.

Am besten nehmen Sie das MQL4-Lehrbuch zur Hand und lesen es von Anfang an, eins nach dem anderen. Wenn Sie Fragen haben, stellen Sie sie, ich werde versuchen, sie zu beantworten.

Ihr Handbuch ist mein Nachschlagewerk. Ich habe es heruntergeladen und ausgedruckt und verwende es ständig.

Es entstehen Fragen, wenn ich nicht verstehe, was ich lese, oder wenn bestimmte Themen nicht behandelt werden.

Es gibt zwei Beispiele für das Schreiben von Daten in eine externe Datei oder das Lesen aus einer Nachrichtendatei, und dies ist ein Aufruf der Funktion Start(). Mehr als einen Monat lang habe ich herumprobiert, bis Andrey Khatimlianskii (Komposter) ein Beispiel gefunden hat, das genau das macht, was ich brauche. Nämlich: init() - Bildung des Tabellenkopfes des Berichts (ca. 30 Spalten), start() - Bildung der Zeile mit den Parametern für jede Transaktion der Sitzung, deinit() - Bildung des Ergebnisses der Sitzung. Ich habe drei Arten von Berichten erstellt (Tabelle mit Parametern für jede Transaktion, Spalte mit Sitzungssummen und Tabelle mit Sitzungssummen) und kann sie in verschiedenen Konfigurationen für die Weiterverarbeitung in Excel verwenden. Übrigens , in deinit() ObjectsDeleteAll(). Aber das war später, aber ich hatte von Anfang an einen Haufen von Diagrammen gemacht, damit ich alles im Tester und im wirklichen Leben sehen und analysieren konnte. Es ist sehr hilfreich bei der Programmierung, denn MQL-4 hat keinen Debugger, und auf diese Weise ist es möglich, auf dem Chart zu sehen, welche Linien (Eröffnungs- und Schließungsbedingungen, Ziele, Handelslinien) das Programm konstruiert und wie es das tut. Daher ist es notwendig, den Expert Advisor anzuschließen, um die Möglichkeit des nicht-virtuellen Handels zu erhalten, sowie die Möglichkeit, die Testergebnisdaten mit der Möglichkeit der automatischen Optimierung zu nutzen. Und das alles, ohne die bisherige Funktionalität des Indikators zu verlieren.

Leider, 495 Seiten des Tutorials, 180 Seiten des AutoGraf-4-Handbuchs, 370 Seiten MetaEditor, MT-Hilfe, ist es unmöglich, alles zu zeigen, und das Leben ist nicht genug, um das Forum zu lesen. Aber das ist nur zum Spaß.

Auf habe ich ein Code-Schema von Strategie-Funktionen (basierend auf Indikator-Algorithmus) gemacht, und ich bin nicht sicher, wo und wie man Skript für ObjectsDeleteAll()setzen ? >> Bitte sehen Sie sich das hier an:

 

Strategie-Funktionscode-Diagramm (basierend auf dem Indikator-Algorithmus)



//+------------------------------------------------------------------+
//|                                          Shema_3_TD_BLS_21_1.mq4 |  
//|                                 Copyright © 2009, Leonid Belskiy |  
//|                                         leonid.belskiy@gmail.com |   
//+------------------------------------------------------------------+  
#property copyright "Copyright © 2009, Leonid Belskiy"
#property link      "leonid.belskiy@gmail.com"
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
#property library                                                                                                        //ж
                                                                                                                         //ж
#import "AG_Lib.ex4"                                                                                                     //ж
    int AG_Magic_Number();                                 // Вычисление MN                                              //ж
    int AG_Message(string & Message[], string _Text);      // Запись сообщений в массив Message[]                        //ж
                                  // Запись управляющих воздействий ф-ии АТ в массив Manager[][]:                        //ж
    int AG_Set_Instr(double & Manager[][], int ii, double v1, double v2, double v3,                                      //ж
                     double v4, double v5, double v6, int io , int ih);                                                  //ж
    int AG_Delete_Instr(double&Manager[][], int ii, int io,int ih);  //Удаление инструментов                             //ж
#import                                                                                                                  //ж
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -                                //ж
    int TD_BLS_21_2(int Parol_S, double Order[][], string Object[],                                                      //ж
                    double Instrument[][][][], int Ddraw_Object[][],                                                     //ж
                    double& Tuning[], double& Manager[][], string& Message[])                                            //ж
        {                                                                                                                //ж
         static int Count = 0;                             // Счётчик посещений этого блока                              //ж
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -                                //ж
         double Lot= NormalizeDouble(Tuning[1],2);         // Значение лотов                                             //ж
         int Per   = NormalizeDouble(Tuning[2],0);         // Значение % (целое)                                         //ж
         int Slip  = NormalizeDouble(Tuning[3],0);         // Проскальзывание (пунктов)                                  //ж
         int SL    = NormalizeDouble(Tuning[4],0);         // StopLoss (пунктов)                                         //ж
         int TP    = NormalizeDouble(Tuning[5],0);         // TakeProfit (пунктов)                                       //ж 
         int Ds    = NormalizeDouble(Tuning[6],0);         // Дистанция (пунктов)                                        //ж
         int St    = NormalizeDouble(Tuning[7],0);         // Шаг модификации (пунктов)                                  //ж
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -                                //ж
         if (Count==0)                                     // Это можно делать один раз в начале                         //ж
             {                                             // Пример сообщения (максимум 62 симв):                       //ж
              AG_Message(Message, "Разработчик J.Smith, http://company.com");                                            //ж
              Count++;                                     // Количество посещений этого блока                           //ж 
                                                                                                                         //ж
              Lot   = 0.1;                                 // Если количество лотов Lot (Tuning[1]) больше нуля, ..      //ж
              Per   = 0;                                   // .. независимо от значения переменной Per (Tuning[2]).      //ж
//              Lot   = 0.0;                                 // 0.0 означает, что колич лотов высчитывается в AutoGraf   //ж
//              Per   = 7;                                   // .. на основе значения % (здесь 7%) суммы баланса         //ж
              Slip  = 1;                                                                                                 //ж   
              SL    = 25;                                                                                                //ж       
              TP    = 100;                                                                                               //ж         
//              Ds    = 20;                                                                                              //ж          
//              St    = 3;                                                                                               //ж          
              Tuning[1] = Lot;                             // Значение лотов                                             //ж          
              Tuning[2] = Per;                             // Значение % (целое)                                         //ж          
              Tuning[3] = Slip;                            // Проскальзывание (пунктов)                                  //ж          
              Tuning[4] = SL;                              // StopLoss (пунктов)                                         //ж          
              Tuning[5] = TP;                              // TakeProfit (пунктов)                                       //ж          
              Tuning[6] = Ds;                              // Дистанция (пунктов)                                        //ж          
              Tuning[7] = St;                              // Шаг модификации (пунктов)                                  //ж          
              AG_Message(Message,"Изменение настроек из АТ.");       // Пример сообщения (макс.62 симв.)                 //ж          
              return(1);                                   // Выход после перенастроек параметров                        //ж          
             }                                                                                                           //ж          
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -                                //ж          
         int MN;                                           // MagicNumber в ф-ии AG_Magic_Number()                       //ж          
         string Comm = "AG_AT";                            // Комментарий (рекомендуется "AG_AT")                        //ж          
         static int Ticket;                                // Номер ордера                                               //ж          
         int _Ord_Ticket = 0;                              // Номер ордера                                               //ж          
         double _Ord_Lots = 0;                             // Полное закрытие                                            //ж          
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -                                //ж          
   double AT[33];                                  // Массив для внешних переменных                                      //ж          
   bool New_Parametr = false;                      // Обновления параметров пока не было                                 //ж          
   for (int i=0; i<=32; i++)                       // Поищем обновлённый параметр                                        //ж          
      {                                            // Если какой-то параметр обновлён..                                  //ж          
       AT[1]=11;                                                                                                         //ж          
                                                                                                                         //ж          
      if(NormalizeDouble(AT[i], 8) !=  NormalizeDouble(Instrument[0][0][i][0],8))                                        //ж          
         {                                                                                                               //ж          
         New_Parametr = true;                      // .. запоминаем этот факт..                                          //ж                  
         for (i=0; i<=32; i++)                     // .. то присвоим новые значения всем                                 //ж          
            AT[i] = Instrument[0][0][i][0];        // Для удобства пользования                                           //ж          
         break;                                    // .. и выходим из цикла перебора                                     //ж          
         }                                                                                                               //ж          
      }                                                                                                                  //ж          
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
    if((nTime!=Time[0])||(CurPeriod!=Period()))                      // На новом баре или изменении таймфрейма все пересчитываем 
        {                                                            // Period Возвращает значение числа минут периода для текущего графика. 
//=================================================
//******** Поиск опорных точек предложения ********
//=================================================
         for(i=2+StepBack,D=2,NP=0; (NP<D)&&(i<Bars); i++)           // Перебираем бары влево начиная со 2-го бара от текущего
             {                                                       // Begin
//            --- // ---
             }                                                       // End;
//=================================================
//********** Поиск опорных точек спроса ***********
//=================================================
         for(i=2+StepBack,D=2,NP=0; (NP<D)&&(i<Bars); i++)           // Перебираем бары влево начиная со 2-го бара от текущего 
             {                                                       // Begin
//            --- // ---
             }                                                       // End;
//=================================================
//****       Рисуем  TD-линии                  ****
//=================================================
//            --- // ---
         CurPeriod=Period();                                         // Соответствие минут графика с минутами системы
         nTime=Time[0];                                              // Соответствие время текущего и бара программы 
        }
//=================================================
//****     Формирование сигналов для сделок    ****
//=================================================
    Fun_New_Bar();                                                   // Определение нового бара
//=================================================
//****     Формирование сигналов на покупку    ****
//=================================================
    if((Close[i]>UpP[0]+UpV*(UpB[0]-i)+Puncture*Point) && (High[i+1]<=UpP[0]+UpV*(UpB[0]-(i+1)))) // Сигнал на покупку
        {
//            --- // ---                                                Нахождение баров для расчета проекторов
//            --- // ---                                                Расчет цен проекторов
//            --- // ---                                                Расчет размеров проекторов
         if(NoQw ... )                                               // Определение квалификаторов прорыва
             {
//            --- // ---                                                Формирование массива цен уровней целей
//            --- // ---                                                Создаем и рисуем сигнал на покупку кружок (красный)
              if(Flag_Up==true)
                  {
//            --- // ---                                                Создаем и рисуем линию на покупку (красный)
//            --- // ---                                                Создаем и рисуем линии целей
//================================================
//****         Открываем сделку  Buy          ****
//================================================
                   if(MiB_Up[1]==0 && Flag_Up_CD_Start==false && Flag_Up_Start==false && Flag_Dn_Start==false)
                       {
                        MiB_Up[1]=i;                                 // Массив номеров баров точек Up сделки MiB_Up[1]-левая, MiB_Up[0]-правая
                        MiP_Up[1]=Close[i];                          // Массив цен точек Up сделки MiP_Up[1]-левая, MiP_Up[0]-правая
                        MiBT_Up[1]=TimeCurrent();                    // Количество секунд в момент открытия сделки
                        Flag_Up_CD_Start=true;                       // Флаг рисования линий сделок на покупку - покупки запрещены    
                        Flag_Up_CD_End=false;                        // до закрытия сделки и образования нового бара
                        Flag_Dn_Start=true;                          // Запрещено открывать противоположную Dn сделку
//                      жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
                        AG_Message(Message, "АТ: сработал критерий открытия Buy.");                          // Сообщение(макс.62симв)                ж 
                        MN = AG_Magic_Number();                                                              // Вычисление MagicNumber (рекомендуется)ж 
                        OrderSend( Symbol(), OP_BUY, Lot, Ask, 2, Bid-SL*Point, Bid+TP*Point, Comm, MN);     // Открытие ордера Buy:                  ж
//                      жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
                       }                                   
                   bay++;                                            // Счетчик нарисованных линий целей на покупку
                   Flag_Up=false;                                    // Линии нарисовали - флаг опустили до образования нового бара
                  }
             }
        }
//=================================================
//****           Закрываем сделку  Buy         ****
//=================================================
    if(Flag_Up_CD_Start==true && Flag_Up_CD_End==false)              // Флаг конца рисования линий сделок на покупку - закрытие сделки       
        {                                                            // Пока сделка открыта, пересчитываем точку [0] и перерисовываем линию
//            --- // ---                                             // Расчет времени слелки (статистика отчета)
//            --- // ---                                             // Расчет результата слелки (статистика отчета)
//            --- // ---                                             // Рисуем линию сделки Up
//-------жжжжжжжжжжжжжжжжжжжжжжжжж Выбор условий закрытия слелки Up
         if(CD_TrSL && Close[i]<iP_Up-TrStopLoss*Point)              // (TrStopLoss==TrSL) Если цена пересекла TrStopLoss        
             {
//            жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
              if (NormalizeDouble(Order[1][6],0) == 0.0)             // Если тип ордера Buy                                                           ж
                  {                                                                                                                                   ж
               _Ord_Ticket = NormalizeDouble(Order[1][4],0);         // Номер ордера                                                                  ж
               _Ord_Lots = NormalizeDouble(Order[1][5],2);           // Полное закрытие                                                               ж
               OrderClose(_Ord_Ticket, _Ord_Lots, Bid, 2);           // Закрыть ордер Buy                                                             ж
                  }                                                                                                                                   ж
//            жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
//            --- // ---                                             // Расчет времени по всем Up сделкам (статистика отчета)
//            --- // ---                                             // Расчет времени по всем сделкам (статистика отчета)
//            --- // ---                                             // Расчет баланса и результатов Up сделок (статистика отчета)
//            --- // ---                                             // Формируем строку отчета (статистика отчета)
             }
         WindowRedraw();         
        }
//=================================================
//****     Формирование сигналов на продажу    ****
//=================================================
    if((Close[i]<DownP[0]+DownV*(DownB[0]-i)-Puncture*Point) && (Low[i+1]>=DownP[0]+DownV*(DownB[0]-(i+1)))) // Сигнал на продажу
        {
//            --- // ---                                                Нахождение баров для расчета проекторов
//            --- // ---                                                Расчет цен проекторов
//            --- // ---                                                Расчет размеров проекторов
         if(NoQw ... )                                               // Определение квалификаторов прорыва
             {
//            --- // ---                                                Формирование массива цен уровней целей
//            --- // ---                                                Создаем и рисуем сигнал на продажу кружок (синий)
              if(Flag_Dn==true)
                  {
//            --- // ---                                                Создаем и рисуем линию на продажу (синий)
//            --- // ---                                                Создаем и рисуем линии целей
//=================================================
//****       Открываем сделку Sell             ****
//=================================================
                   if(MiB_Dn[1]==0 && Flag_Dn_CD_Start==false && Flag_Dn_Start==false && Flag_Up_Start==false)
                       {
                        MiB_Dn[1]=i;                                 // Массив номеров баров точек Dn сделки iB_Up[1]-левая, iB_Dn[0]-правая
                        MiP_Dn[1]=Close[i];                          // Массив цен точек Dn сделки iP_Dn[1]-левая, iP_Dn[0]-правая
                        MiBT_Dn[1]=TimeCurrent();                    // Массив времени баров содержащих точки Dn сделки iBT_Dn[1]-левая, iBT_Dn[0]-правая
                        Flag_Dn_CD_Start=true;                       // Флаг начала рисования линий сделок на продажу                       
                        Flag_Dn_CD_End=false;                        // Флаг конца рисования линий сделок на продажу                       
                        Flag_Up_Start=true;                          // Запрещено открывать противоположную Up сделку
//                      жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
                        AG_Message(Message, "АТ: сработал критерий открытия Sell.");                         //Сообщение(макс62симв)                  ж
                        MN = AG_Magic_Number();                                                              // Вычисление MagicNumber (рекомендуется)ж
                        OrderSend( Symbol(), OP_SELL, Lot, Bid, 2, Ask+SL*Point, Ask-TP*Point, Comm, MN);    // Открытие ордера Sell:                 ж
//                      жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
                       }
                   sell++;                                           // Счетчик нарисованных линий целей на продажу
                   Flag_Dn=false;                                    // Линии нарисовали - флаг опустили до образования нового бара
                  }
             }
        }
//=================================================
//****           Закрываем сделку Sell         ****
//=================================================
    i=0;
    if(Flag_Dn_CD_Start==true && Flag_Dn_CD_End==false)              // Флаг конца рисования линий сделок на продажу - закрытие сделки      
        {                                                            // Пока сделка открыта, пересчитываем точку [0] и перерисовываем линию
//            --- // ---                                             // Расчет времени слелки (статистика отчета)
//            --- // ---                                             // Расчет результата слелки (статистика отчета)
//            --- // ---                                             // Рисуем линию сделки Dn
//            --- // ---
//-------жжжжжжжжжжжжжжжжжжжжжжжжж Выбор условий закрытия слелки Dn
         if(CD_TrSL && Close[i]>iP_Dn+TrStopLoss*Point)              // (TrStopLoss==TrSL) Если цена пересекла TrStopLoss        
             {
//            жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
              if (NormalizeDouble(Order[1][6],0) == 1.0)             // Если тип ордера Sell                                                          ж
                  {                                                                                                                                   ж
                   _Ord_Ticket = NormalizeDouble(Order[1][4],0);     // Номер ордера                                                                  ж
                   _Ord_Lots = NormalizeDouble(Order[1][5],2);       // Будем закр.ордер полностью                                                    ж
                   OrderClose(_Ord_Ticket, _Ord_Lots, Ask, 2);       // Закрыть ордер Sell                                                            ж
                  }                                                                                                                                   ж
//            жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
//            --- // ---                                             // Расчет времени по всем Dn сделкам (статистика отчета)
//            --- // ---                                             // Расчет времени по всем сделкам (статистика отчета)
//            --- // ---                                             // Расчет баланса и результатов Dn сделок (статистика отчета)
//            --- // ---                                             // Формируем строку отчета (статистика отчета)
             }
         WindowRedraw();         
        }
   }
//  жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
    return(1);           // Нормальный выход                                                                                      ж
   }                                                                                                                              ж
//  жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
void Fun_New_Bar()                                                   // Функция определения образования нового бара
//            --- // ---


 
LeonidSB писал(а) >>

Aber genau Ich habe eine Strategie Funktion Code-Schema (basierend auf Indikator-Algorithmus) und ich weiß nicht, wo und wie man Skript für ObjectsDeleteAll()einfügen ? Habe ich die Handelsfunktionen richtig eingegeben (sie sind mit "zzzzzzzz" hervorgehoben)? Bitte sehen Sie sich das Material an:

Ich glaube, Sie sind etwas voreilig.

Beim Programmieren kann man nicht nach Gefühl vorgehen.

Sie dürfen in Ihrem eigenen Code nichts verwenden, was ein Programmierer nicht ganz oder gar nicht versteht.

Auf diese Weise wird nichts erledigt.

Die Programmierung erfordert, vielleicht mehr als jede andere Tätigkeit, in ihrem Wesen völlige Klarheit und vollständige Selbstdarstellung.

Beginnen Sie mit dem Schreiben von elementarem Code. Gehen Sie erst dann zu komplexeren Aufgaben über, wenn Sie jeden Buchstaben Ihres Codes vollständig erklärt haben.

--

Im Lehrbuch finden Sie Beispiele für einfache und einfache Expert Advisors.

In der Einführung in die Programmierung wurde bereits eine Klassifizierung der Anwendungsprogramme vorgenommen (Merkmale und Unterschiede zwischen Expert Advisors, Skripten und Indikatoren).

Ein Skript kann nicht in einen Expert Advisor "eingesteckt" werden. Dies ist ein separates, unabhängiges Programm.

Auf den ersten Blick kann ich sagen, dass Ihr Code schlecht formatiert ist.
Außerdem könnten die meisten Blöcke als Funktionen gestaltet werden. Das wäre klarer (sonst können Sie Ihren eigenen Code in ein paar Monaten nicht mehr lesen)

 

Sie haben völlig Recht. Ich stimme mit Ihnen in allen Punkten überein. Danke, dass Sie sich die Zeit genommen haben, konstruktive Kritik zu üben!


Mit "einbinden" meine ich, Code zu schreiben, der die Skript-Operation mit AG_AT() oder seiner Funktion, die die Strategie implementiert, verknüpft.


Im Tutorial enthält das Beispiel eines einfachen Expert Advisors start(), während im regulären Expert Advisor alle speziellen Funktionen vorhanden sind. Es gibt keine Probleme, aber wie man so schön sagt, "der Appetit kommt mit dem Essen".

Die Frage ist, wie man all die großartigen Funktionenvon AutoGraf-4 nutzen kann. Was sollte ich tun?

Grund der Beschwerde: