MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 763

 
Alexey Viktorov :

OnTick()에서 버튼 클릭을 제어합니다. 테스터에서 작동하는 경우 조건부로 수행할 수 있습니다. OnTick()의 컨트롤이지만 실제 생활에서는 이 컨트롤의 블록이 실행되지 않고 OnChartEvent()에 컨트롤이 있습니다.

방법 것입니다? 이벤트 매개변수는 OnTick()에 전달되지 않습니다.

 
Ilya Prozumentov :

방법 것입니다? 이벤트 매개변수는 OnTick()에 전달되지 않습니다.

그러나 버튼 누름은 제어됩니다

 if ( ObjectGetInteger ( 0 , "name" , OBJPROP_STATE ) == true )
  {
   // Делаем что надо по нажатию кнопки и возвращаем прежнее её состояние
   ObjectSetInteger ( 0 , "name" , OBJPROP_STATE , false );
  }


OnChartEvent() 에서 완전히 동일한 컨트롤로 확인이 모든 틱 이 아니라 누를 때만 수행된다는 유일한 차이점이 있습니다.
 
Alexey Viktorov :

그러나 버튼 누름은 제어됩니다


OnChartEvent() 에서 완전히 동일한 컨트롤로, 체크는 누를 때만 수행되고 모든 틱 에는 수행되지 않는다는 유일한 차이점이 있습니다.

출시 당시 아닌가요? 개체에 대한 클릭은 개체 내에서 누르고 있는 경우에만 계산됩니다. 개체를 클릭하고 버튼을 누른 상태에서 개체에서 커서를 이동한 다음 놓으면 개체에 대한 클릭이 기록됩니까?

그러나, 나는 아직 실험하지 않았습니다.

 
Artyom Trishkin :

출시 당시 아닌가요? 개체에 대한 클릭은 개체 내에서 누르고 있는 경우에만 계산됩니다. 개체를 클릭하고 버튼을 누른 상태에서 개체에서 커서를 이동한 다음 놓으면 개체에 대한 클릭이 기록됩니까?

그러나, 나는 아직 실험하지 않았습니다.

저도 실험을 안해봐서 확답은 못드리겠습니다. 하지만 압박을 받고 있는 것 같다. 어딘가에 이것에 대해 토론하는 주제가있었습니다. 내 기억이 완전히 바뀌지 않았다면 이벤트를 마우스 버튼을 눌렀다 떼는 것으로 나누어달라고까지 한 것 같습니다.

 
Ghabo :

OnChartEvent()는 테스터에서 작동하지 않습니다.

테스터에서 작동할 수 있는 버튼을 보여주세요. 예를 들어, 거래 = true가 발생할 플래그를 클릭하십시오. 다시 눌러? 거래=거짓;


일리야 프로주멘토프 :

방법 것입니다? 이벤트 매개변수는 OnTick()에 전달되지 않습니다.

https://www.mql5.com/ru/forum/171668#comment_10574757

Демо счет работающий в выходные дни (Есть ли сие чудо)
Демо счет работающий в выходные дни (Есть ли сие чудо)
  • 2017.03.04
  • www.mql5.com
Доброго времени, очень увлекся разработкой на mql, но к сожалению позволить себе это могу лишь в выходные дни‌, но в выходные дни проблема с отладк...
 

EquityChartModeller 표시기의 코드를 구문 분석하고 있습니다.

2가지 사용자 기능이 있습니다.

 ///////////////////////////////////////////////////////////////////////////
void SetPositions( string name, int number)                                           // 69 SetPositions(Portfolio_Formula_A,1)
  {
   BlocksLastN=BlocksTotal;                                                         //
   SeparateBlocks(name);                                                             // Разбиваем строку на блоки
   for ( int i=BlocksLastN;i<BlocksTotal;i++)                                         // Перебираем блоки формулы
     {
      Total++;                                                                       // Увеличиваем кол-во инструментов ++;
       ArrayResize (Lots,Total);                                                       // Устанавливаем размер массива Lots размером Total;
       ArrayResize (Instrument,Total);                                                 // Устанавливаем размер массива Instrument размером Total;
       ArrayResize (OpenPrice,Total);                                                 // Устанавливаем размер массива OpenPrice размером Total;
       ArrayResize (ClosePrice,Total);                                                 // Устанавливаем размер массива ClosePrice размером Total;
       ArrayResize (Index,Total);                                                     // Устанавливаем размер массива Index размером Total;
       int length= StringLen (Block[i]);                                               // Определяем кол-во символов в блоке;
       int p=length- 1 ;                                                               // Для перебора создаем переменную меньше на единицу;
       while (p>= 0 )                                                                   // До тех пор пока есть символ
        {
         string X= StringSubstr (Block[i],p, 1 );                                       // определяем символ;
         if (X== "+" ||X== "-" ) break ;                                                   // если дошли до знака то прекращаем;
         if (p== 0 ) break                                                             // Если дошли до первого символа то прекращаем;
         else p--;                                                                   // Иначе переходим к следующему символу 
        }
      Index[Total- 1 ]=number;
      Instrument[Total- 1 ]= StringSubstr (Block[i], 0 ,p);                               // Запоминаем элемент массива Instrument - название инструмента;
       if (p== 0 ) Lots[Total- 1 ]= 1 ;
       else Lots[Total- 1 ]= StrToDouble ( StringSubstr (Block[i],p,length-p));             // Запоминаем элемент массива Lots - направление и размер лота;
       if ( MarketInfo (Instrument[Total- 1 ], MODE_POINT )== 0 )                             // Если размера пункта инструмента нет
        {Missing= StringConcatenate (Missing, " " ,Instrument[Total- 1 ]);Error= true ;}     // Запоминаем потерявшийся инструмент "Название инструмента ERROR"
     }
  }
///////////////////////////////////////////////////////////////////////////                     // Функция разбиения строки формулы на блоки
void SeparateBlocks( string text) // 218 SeparateBlocks(name); 
  {
   string fragment= "" ;                                                                           // инструмент с направлением и лотом (до порбела)
   int length= StringLen (text);                                                                   // Возвращает число символов в строке (Portfolio_Formula_A)
   for ( int position= 0 ;position<length;position++)                                               // Перебор символов строки
     {
       int sym= StringGetChar (text,position);                                                     // Возвращает значение символа, расположенного в указанной позиции строки
       if (sym!= 32 &&sym!= 9 &&sym!= 10 &&sym!= 13 ) fragment=fragment+ StringSubstr (text,position, 1 );     // Если не пробел, не таб, не перевод строки, не возврат каретки - добавляем символ фрагменту
       if (sym== 32 ||sym== 9 ||sym== 10 ||sym== 13 ||position==length- 1 )                                 // Если пробел или таб или перевод строки или возврат каретки или последний символ строки формулы
         if ( StringLen (fragment)> 0 )                                                               // Если у фрагмента есть символы 
           {
            BlocksTotal++; ArrayResize (Block,BlocksTotal);                                       // Кол-во блоков++; Изменяем размер массива Block;
            Block[BlocksTotal- 1 ]=fragment;fragment= "" ;
           }                                                                                     // Запоминаем фрагмент в массиве; обнуляем фрагмент для след. итерации цикла
     }
  }

노란색으로 강조 표시된 부분 이 이해되지 않습니다. 포트폴리오 공식이 "USDSEK-4 USDCAD+9 EURJPY-5 AUDNZD-5 EURAUD-1 GBPJPY+6 USDNOK-2"인 경우 while(p>=0) 루프의 반복은 어떻게 if(p)에 도달할 수 있습니까? ==0 ) 기호에만 도달한 후 중단된 경우 if(X=="+"||X=="-") break; ??

그리고 더 아래에서 모든 것이 동일한 경우(p==0) 그렇다면 로트가 1로 설정된 이유는 - 로트[Total-1]=1입니다. ??

표시기: https://www.mql5.com/ru/code/10962

Equity Chart Modeller
Equity Chart Modeller
  • www.mql5.com
Данный индикатор создан на базе одной из версий известного индикатора Virtual Equity (автор: Xupypr) и был адаптирован для целей портфельного моделирования и парного трейдинга. Индикатор предназначен для быстрого анализа графиков изменения стоимости портфелей/синтетиков непосредственно перед открытием позиций. Есть два основных сценария...
 
Sergey :

EquityChartModeller 표시기의 코드를 구문 분석하고 있습니다.

2가지 사용자 기능이 있습니다.

...


표시기: https://www.mql5.com/ru/code/10962

코드를 올바르게 붙여넣습니다 .


 

수정

 
안녕하세요, 스크립트를 차트로 변환하는 방법 문제에 대한 도움을 요청합니다.
 
Sergey :

수정

그리고 처리할 스타일리스트는 ? Ctrl+,(영어 레이아웃의 쉼표)

나는 선택하지 않는다. 도움이 필요하기 때문입니다. 즉, 덤프가 아닌 편리한 형식으로 정보가 제공됩니다.