AutoGraf 시리즈 4 - MQL 기능. - 페이지 33

 

에게!

질문에 답해주세요.

코드에서 외부 변수 를 지정하는 방법과 위치는 무엇입니까?

이것은 주어진 예에서 명확하지 않습니다.

//================================================================================== 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)
      {

응용 프로그램 설정의 외부 변수가 비개인화되지 않았는지 확인하는 방법 AT_1 ... AT_32, 그렇지 않으면 각 숫자의 의미를 기억하지 못할 것입니다.

 

전략에 대한 외부 변수의 값은 Expert Advisor 설정에서 지정됩니다(외부 변수의 모든 값).

Expert Advisor에서 외부 변수의 이름을 변경할 수 없습니다. AG_exp.ex4 전문가 코드에 포함되어 있습니다.

EA의 외부 변수는 Instrument 배열을 통해 첨부된 전략 파일로 전송됩니다.

Expert Advisor의 외부 변수에 해당하는 전략의 로컬 변수 이름은 전략에서 변경할 수 있습니다.

이 예에서는 다음이 수행됩니다.

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

원하는 대로 이름을 설정할 수 있습니다.

예를 들어 AT[i] 대신 Alfa, Beta 등을 지정합니다.

어레이 기기 [][][][]: http://autograf.dp.ua/Pages/2/26/267/2676.htm
AG_AT() 함수의 전략: http://autograf.dp.ua/Pages/2/26/267/26711/26711_1.htm
첨부된 전략: http://autograf.dp.ua/Pages/2/26/267/26711/26711_2.htm
전략 코딩 예:
http://autograf.dp.ua/Pages/2/26/267/26712/26712_1.htm
http://autograf.dp.ua/Pages/2/26/267/26712/26712_2.htm

 

이제 이해가된다. 그리고 프로그래밍 경험이 없이는 한 번에 도달할 수 없습니다. 고맙습니다.

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

그리고 그것을 내 전략에 어디에 넣어야 할까요? 아니면 사용자 정의 함수가 호출될 때마다 객체가 생성되고 삭제됩니까?

 
LeonidSB писал(а) >>

이제 이해가된다. 그리고 프로그래밍 경험이 없이는 한 번에 도달할 수 없습니다. 고맙습니다.

내 전략의 어디에 넣어야 합니까? 아니면 사용자 정의 함수가 호출될 때마다 객체가 생성되고 삭제됩니까?

사용자 정의 기능이나 전략으로 작성할 필요는 없습니다.

간단한 별도의 스크립트를 만드십시오. 전략을 끈 후 창에 던지면 불필요한 모든 것이 삭제됩니다.

(AG 5의 전략에서 deinit와 같은 작업을 수행해야 하지만 솔루션은 MQL 5의 기능에 따라 다릅니다.)

 

좋은 조언 감사합니다. 당신 만이 나를 과대 평가합니다. 아직 대본을 찾지 못했지만 이 방향으로 가겠습니다. 가능하면 비슷한 링크를 제공하십시오.

지금까지 지표에 대해서만 알아봤습니다.

나는 Vladislav Goshkov(VG)를 TD_Points&Line_mgtd1.1.mq4의 유사체로 사용하고 log.mq4 Copyright © 2006, 보고서 작성을 위한 komposter를 추가했으며 내 지표의 2,000줄 이상을 얻었습니다.

나는 그의 도표를 만들었다. 약 500 줄이 나왔습니다. 당신은 아마 여전히 절단할 수 있지만 지금까지는.

배지

 // --- // ---

컷아웃이 표시됩니다.

지금까지는 그 구조가 머릿속에 남아 있고, 원하는 기능을 구현하고 싶습니다. 그런 다음 규칙에 따라 모든 것을 빗질하십시오(비용의 기하학적 진행에서 품질의 가격).

음, SRC에 521행을 삽입하지 마십시오. "텍스트가 허용되는 크기보다 큽니다." 파일을 첨부해야 합니다

파일:
 

이 단계에서는 응용 프로그램의 특수 기능과 유형에 익숙해져야 합니다.

그러기 위해서는 MQL4 교과서 를 처음부터 차례대로 읽는 것이 가장 좋다. 질문이있을 것입니다-레이아웃, 나는 대답하려고 노력할 것입니다.

 
SK. >> :

이 단계에서는 응용 프로그램의 특수 기능과 유형에 익숙해져야 합니다.

그러기 위해서는 MQL4 교과서 를 처음부터 차례대로 읽는 것이 가장 좋다. 질문이있을 것입니다-레이아웃, 나는 대답하려고 노력할 것입니다.

당신의 교과서는 나의 참고서입니다. 모든 것은 그와 함께 시작되었습니다. 다운받아 출력해서 잘 사용하고 있습니다.

내가 읽은 내용의 본질을 이해하지 못하거나 일부 질문이 공개되지 않으면 질문이 발생합니다.

외부 파일에 데이터 쓰기 또는 뉴스 파일 읽기에 대한 두 가지 예가 있으므로 이것은 Start() 함수에 대한 한 번의 호출에 대한 것입니다. 나는 Andrey Khatimlianskii( komposter )가 내가 필요로 하는 일을 한 예를 찾을 때까지 한 달 이상 만지작거리며 보냈습니다. 즉, init() – 보고서 테이블 헤더의 형성(약 30개 열), start() – 세션에 대한 각 트랜잭션의 매개변수로 라인 형성 , deinit () – 세션 결과의 형성. 또한 세 가지 유형의 보고서(각 트랜잭션에 대한 매개변수가 있는 테이블, 세션 결과가 있는 열, 세션 결과가 있는 테이블)를 만들었으며 다양한 구성으로 원하는 만큼 조각할 수 있으므로 처리할 수 있습니다. 엑셀에서. 그건 그렇고, deinit() ObjectsDeleteAll(). 하지만 그건 나중이었고, 처음부터 그는 많은 그래픽을 쌓았습니다. 테스터와 실생활에서 모든 것이 차트에 남아 있고 모든 것을 보고 분석할 수 있습니다. 이것은 프로그래밍할 때 많은 도움이 됩니다. MQL -4에는 디버거가 없고 차트에서 프로그램이 그리는 선(개시 조건 및 종가 조건, 목표, 거래 선)과 이를 수행하는 방법을 볼 수 있기 때문입니다. 그러나 이것은 모두 지표의 틀 안에 있지만 실제로 거래되지는 않습니다. 따라서 비가상 거래의 가능성과 테스터 보고서 데이터의 자동 최적화 가능성을 얻기 위해서는 Expert Advisor를 붙일 필요가 있습니다. 그리고 이 모든 것은 지금까지 지표에 구현된 기존 기능을 잃지 않고 있습니다.

불행히도 교과서 495페이지, 참고서 180페이지, AutoGraf -4에 대한 설명 370페이지, MetaEditor , MT 에 대한 참조의 틀 내에서 모든 것을 말할 수 없고 포럼을 읽는 것만으로는 충분하지 않습니다. . 그러나 이것은 모든 가사가 그렇습니다.

그러나 구체적으로 (지표 알고리즘 기반) 전략 함수의 코드 다이어그램을 만들었는데 ObjectsDeleteAll()에 대한 스크립트를 어디에 어떻게 삽입해야 하는지 모르겠습니다 . 거래 기능을 올바르게 삽입했습니까("zhzhzhzhzhzh"로 강조 표시되었습니까? 이 경제를 보십시오.

 

전략 기능 코드 체계(지표 알고리즘 기반)



//+------------------------------------------------------------------+
//|                                          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 писал(а) >>

그러나 구체적으로 (지표 알고리즘 기반) 전략 함수의 코드 다이어그램을 만들었는데 ObjectsDeleteAll()에 대한 스크립트를 어디에 어떻게 삽입해야 하는지 모르겠습니다 . 거래 기능을 올바르게 삽입했습니까("zhzhzhzhzhzh"로 강조 표시되었습니까? 이 경제를 보십시오.

나는 당신이 당신의 일에서 자신보다 앞서 가고 있다고 생각합니다.

프로그래밍은 더듬는 것이 아닙니다.

네이티브 코드에서 프로그래머가 완전히 이해하지 못하거나 전혀 이해하지 못하는 것을 사용하는 것은 허용되지 않습니다.

그래서 아무 것도 나오지 않을 것입니다.

프로그래밍은 본질적으로 다른 어떤 활동보다 아마도 완전한 명확성과 완전한 자기 보고를 요구합니다.

기본 코드를 작성하여 시작하십시오. 코드의 각 문자를 완전히 설명할 수 있을 때만 더 복잡한 것으로 이동하십시오.

--

간단하고 일반적인 Expert Advisor의 예는 교과서에 있습니다.

앞서 프로그래밍 입문에서는 응용 프로그램의 분류(전문가의 기호와 차이점, 스크립트 및 지표)를 제공합니다.

스크립트는 Expert Advisor에 "연결"될 수 없습니다. 이것은 독립 실행형 프로그램입니다.

코드에 대해 말하자면 형식 면에서 부주의하게 컴파일되었다고 말할 수 있습니다.
또한 대부분의 블록을 함수로 배열할 수 있습니다. 이렇게 하면 더 명확해질 것입니다(그렇지 않으면 몇 달 안에 자신의 코드를 읽을 수 없을 것입니다)

 

너가 확실히 맞아. 나는 모든 점에서 당신의 의견에 동의합니다. 시간을 내어 건설적인 비판을 해주셔서 감사합니다!


"삽입"은 스크립트의 작업을 AG _ AT () 함수 또는 전략을 구현하는 첨부된 함수와 연결하는 코드를 작성하는 것을 의미했습니다.


튜토리얼에서는 간단한 Expert Advisor의 예에 s tart()가 있고 일반적인 경우에는 모든 특수 기능이 있습니다. 문제는 없지만 '식욕은 먹으면 온다'는 말이 있다.

문제는 AutoGraf -4의 모든 훌륭한 기능을 사용하는 방법입니다. 여기 어떻게?