초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 484

 
친구 여러분, 신호 설정에 대해 더 질문이 있습니다.
문제는 공급자의 주문이 마감될 때 가입자의 주문이 계속 보류된다는 것입니다. 스프레드의 차이 때문인 것 같습니다. 구독자의 거래가 공급자에서 마감될 때 즉시 마감되도록 하려면 어떻게 해야 합니까? 어떤 설정을 변경해야 합니까?
 
Leo59 :
고마워요 알렉세이!!!! 4)))))

그래서... 나는 내 오래된 칠면조를 찾아서 잘라냈습니다. 나는 당신을 위해 쓰지 않을 것입니다)),하지만 그것은 푸시를 갈 것입니다. 거기에 주석을 추가했는데 변수 이름이 이름에서 명확해졌습니다.

 datetime date[]; // тут будем хранить данные времени баров, которые видны на экране
// если нужны другие данные баров, заводим соотв. массивы 

void DoWork( bool redrawAll = false )
{
     int visibleBars = 1 , firstVisibleBars = 0 ;
    visibleBars = ( int ) ChartGetInteger ( 0 , CHART_VISIBLE_BARS );
    firstVisibleBars = ( int ) ChartGetInteger ( 0 , CHART_FIRST_VISIBLE_BAR );
    
     ArrayResize (date, visibleBars + 10 ); // выделяем память с запасом

     // так можно узнать масштаб графика, может пригодится
     int scale = ( int ) ChartGetInteger ( 0 , CHART_SCALE );
     // копируем данные времен баров 
     if ( CopyTime ( Symbol (), Period (), startpos, visibleBars, date) == - 1 )
    {
         Print ( "Не удалось скопировать значения времени! Код ошибки = " , GetLastError ());
         return ;
    }

     //--- определим шаг, если надо работать с масштабом
     int step = 1 ;
     switch (scale)
    {
     case 0 :
        step = 12 ;
         break ;
     case 1 :
        step = 6 ;
         break ;
     case 2 :
        step = 4 ;
         break ;
     case 3 :
        step = 2 ;
         break ;
    }
     double priceMin = ChartGetDouble ( 0 , CHART_PRICE_MIN , 0 );
     double priceMax = ChartGetDouble ( 0 , CHART_PRICE_MAX , 0 );

     for ( int i = visibleBars - 1 ; i >= 0 ; i--)
    {
         /*
        проходимся по всем видимым барам и ищем стрелки, искать можно путями:
        1. Изначально при создании стрелок надо формировать имена стрелок с привязкой ко времени, например
        string name = "UpArrow"  + IntegerToString(TimeCurrent());
        тогда тупо ищем стрелку с таким именем и далее двигаем, куда надо
        2. Заносить стрелки в структуры и класть их в хештаблицу, первый проще
        */
    }
    
}
 
Artem Prischepa :
친구 여러분, 신호 설정에 대해 더 질문이 있습니다.
문제는 공급자의 주문이 마감될 때 가입자의 주문이 계속 보류된다는 것입니다. 스프레드의 차이 때문인 것 같습니다. 구독자의 거래가 공급자에서 마감될 때 즉시 마감되도록 하려면 어떻게 해야 합니까? 어떤 설정을 변경해야 합니까?

거래도 거의 즉시 마감되어야 합니다. 질문:

  1. 이때 가입자 단말기가 켜져 있습니까?
  2. 문제일의 터미널 로그 파일을 첨부해주세요.
 
Alexey Volchanskiy :

그래서... 나는 내 오래된 칠면조를 찾아서 잘라냈습니다. 나는 당신을 위해 쓰지 않을 것입니다)),하지만 그것은 푸시를 갈 것입니다. 거기에 주석을 추가했는데 변수 이름이 이름에서 명확해졌습니다.

또한 이 줄 에는 표시기 하위 창의 번호 를 입력해야 합니까? 정확히 무엇이 필요한지 모르겠습니다.

 ChartGetDouble ( 0 , CHART_PRICE_MIN , 0 );
 
Alexey Volchanskiy :

또한이 줄에 표시기 하위 창의 번호를 입력해야합니까? 정확히 무엇이 필요한지 모르겠습니다.

아침에 흩어져있는 웁스, 코드에서 차트 이벤트 처리를 복사하여 붙여 넣지 않았습니다.

 void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
{
     if (id == CHARTEVENT_CHART_CHANGE )
    {
        DoWork( true );
         ChartRedraw ();
    }    
}
 
Alexey Volchanskiy :

그래서... 나는 내 오래된 칠면조를 찾아서 잘라냈습니다. 나는 당신을 위해 쓰지 않을 것입니다)),하지만 그것은 푸시를 갈 것입니다. 거기에 주석을 추가했는데 변수 이름이 이름에서 명확해졌습니다.

도움을 주신 Alex에게 감사드립니다!

그리고 단계를 고정할 위치와 일반적으로 기능은 어떻습니까?

     //--- определим шаг, если надо работать с масштабом
     int step = 1 ;

그리고 여기 있습니다:

         2 . Заносить стрелки в структуры и класть их в хештаблицу, первый проще

나는 결코하지 않았다. 가능하면 이해하고, 이해하고, 적용할 수 있도록 코드의 예를 들어 주십시오.

 
Alexey Volchanskiy :

아침에 흩어져있는 웁스, 코드에서 차트 이벤트 처리를 복사하여 붙여 넣지 않았습니다.

나는 지식과 함께 당신의 산만을 원합니다))
알고 나면 꽤 쉽습니다. 열쇠를 노크해 욕망과 기회만 있다면
그리고 당신이 모르고 파고들 때 ... 그것이 가득 차있는 것입니다 ... 그리고 팁도 있다면, 일반적으로 크란트, 충분한 신경이 없을 것입니다
그래서 팁을 주셔서 감사합니다!
 
Leo59 :
도움을 주신 Alex에게 감사드립니다!

그리고 단계를 고정할 위치와 일반적으로 기능은 어떻습니까?

그리고 여기 있습니다:

나는 결코하지 않았다. 가능하면 이해하고, 이해하고, 적용할 수 있도록 코드의 예를 들어 주십시오.

차트를 수평으로 압축하면(+/- 키), 스케일이 변경되고 때로는 그래픽 개체가 서로 겹칠 수 있습니다. 만일의 경우를 대비하여 이 코드를 가져왔습니다. 스케일을 결정하는 방법입니다.

해시가 있는 코드는 제공하지 않겠습니다. 해시는 존재하지 않으며 아이디어가 떠올랐습니다. 옵션 1을 수행하는 것이 더 쉽습니다.

지식에 관해서는 공부하는 모든 사람에게 여가 시간에 도움말을 읽고 모든 것이 있는 섹션을 건너뛰라고 조언합니다. 즉, 벼락치기를 할 필요가 없다. 나는 그런 벼락치기를 했고, 좋은 결과로 이어지지 않았다. 그런 일이 있다는 것을 최소한 대략적으로 알아야 합니다. 글쎄, 적어도 섹션/하위 섹션이 있습니다. 그런 다음 질문이 발생하면 기어가 머리에서 스크롤되고 검색 방향이 나타납니다. 원칙적으로 참조는 이상적이지 않지만 매우 정상적이며 많은 예가 있습니다.

언어 자체가 간단하기 때문에 배우기 어렵지 않습니다. API에서 정확히 발생하는 어려움, 어디서 무엇을, 어떻게 적용해야 하는지

 
안녕하세요!

언뜻보기에 작업은 3 페니만큼 간단합니다. 하지만!....
표시기 창에는 진폭이 다른 "0"을 기준으로 매달린 오실레이터 라인이 있습니다.
실제로 작업은 다음과 같습니다.
- 아래에서 위로 "0"을 교차할 때 표시창의 하단 경계선에 화살표를 그리고,
- "0"을 위에서 아래로 교차할 때 표시창의 위쪽 테두리 에 화살표를 그리고,
- 표시기 창에서 오실레이터 차트를 자체 스케일링할 때 화살표는 표시기 창의 경계에 자동으로 남아 있어야 합니다.
저것들. 히스토리 차트에서 앞뒤로 스크롤하거나 수평 스케일을 변경하는 경우 화살표는 항상 표시기 창의 경계에 자동으로 남아 있어야 합니다.

큰 요청 은 조언을 제공하지 마십시오 , "재정적으로 도움")). 그러한 기능을 구현 하는 작업 코드 또는 이에 대한 링크를 첨부하십시오.

미리 감사드립니다!
 

내가 그것을 알아낼 수 있도록 도와주세요!

나는 각 (그대로) 요일(파일은 하루에 한 번 작성됨)에 대한 최대 감소를 찾아야 합니다 . - MT4 터미널.

최대 드로우다운은 차트에서 펀드의 피크부터 현재 드로우다운까지의 거리이고, 드로우다운은 현재 손실입니다.

이 코드를 작성했습니다

   if(Analiz_Prosadki==true)
     {
      if(ContolSavaTXT==1)
        {
         ProfitNew=0;
         ProfitMin=0;
         ContolSavaTXT=0;
        }

      if(ContolSavaTXT==0)
        {
         ProfitNew=AccountInfoDouble(ACCOUNT_PROFIT);
         BalansNew==AccountInfoDouble(ACCOUNT_BALANCE);  //Текузее значение баланса
         if (BalansNew>BalansMax) BalansMax=BalansNew;
         if (ProfitNew<ProfitMin && BalansNew>=BalansMax) ProfitMin=ProfitNew;
         if (ProfitNew<ProfitMin && BalansNew<BalansMax) ProfitMin=ProfitNew-(BalansMax-BalansNew);
        }

      ContolSavaTXT=Printer.Write((string)TimeCurrent(),ProfitMin);   // Пишем информацию в файл - функция возвращает 1
     }

그러나 일부 차트에서는 올바르게 표시되고 일부에서는 표시되지 않습니다. 시각적으로는 차트가 동일한 유형입니다.

분명히 코드나 논리에 실수를 한 것 같은데 어느 쪽인지 알 수 없습니다.

사유: