찻주전자의 질문 - 페이지 51

 

papaklass 에게 대단히 감사합니다. 이제 그 차이점이 무엇인지 이해하려고 노력할 것입니다.

 

전문가가 이 코드 조각에 집착하는 이유는 다음과 같습니다.

 if (Orders_Total!= 0 )
  {
   for (i=Orders_Total;i>= 0 ;i--)
     {
      Alert (Orders_Total);
      if ( Symbol ()== PositionGetSymbol (i))
        {
         OpenPrice= PositionGetDouble ( POSITION_PRICE_OPEN );
         OrderLot = PositionGetDouble ( POSITION_VOLUME );
         StopLoss = PositionGetDouble ( POSITION_SL );
         TakeProfit= PositionGetDouble ( POSITION_TP );
         if ( PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_BUY )
           {
            for (i= 0 ;i< 12 ;i++)
              {
               if (Price[i].low<lowest)
                 {
                  lowest=Price[i].low;
                 }
              }
            Alert (lowest);
            SL= NormalizeDouble (lowest-spread- _Point , _Digits );
            if (StopLoss<SL)
              {
               request.action= TRADE_ACTION_SLTP ;
               request.symbol= _Symbol ;
               request.volume= OrderLot;
               request.sl=SL;
               request.tp=TakeProfit;
               request.type= ORDER_TYPE_BUY ;
               OrderSend (request,result);
              }
           }
         if ( PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_SELL )
           {
            for (i= 0 ;i< 12 ;i++)
              {
               if (Price[i].high>highest)
                 {
                  highest=Price[i].high;
                 }
              }
            Alert (highest);
            SL= NormalizeDouble (highest+spread+ _Point , _Digits );
            if (StopLoss>SL)
              {
               request.action= TRADE_ACTION_SLTP ;
               request.symbol= _Symbol ;
               request.volume= OrderLot;
               request.sl=SL;
               request.tp=TakeProfit;
               request.type= ORDER_TYPE_SELL ;
               OrderSend (request,result);
              }
           }
        }
     }
  }

삽입된 경고 Orders_Total=2 최저 및 최고도 적절한 값을 제공하지만 EA는 이 주기에서 중단되어 무한한 수의 경고를 발행하고 다른 오류(주문 수정과 관련된)를 발행하지 않습니다.

초보자를 도와주세요 :)

 

하나의 외부 루프와 두 개의 내부 루프에 대해 동일한 루프 변수 i는 외부 루프를 새로 반복할 때마다 12가 됩니다.

 
stringo :

하나의 외부 루프와 두 개의 내부 루프에 대해 동일한 루프 변수 i, 외부 루프의 새로운 반복마다 12가 됩니다.

감사해요!!!
 

코드를 고칠 수 있습니까? 현재 바 의 시가 가 필요합니다. 미리 감사드립니다 .

 double Open[], val4;
ArraySetAsSeries (Open, true );
CopyOpen (Symbol_, PERIOD_M15 , 1 , 0 ,Open);
val4 = (Open[ ArrayMinimum (Open, 0 , 1 )] );

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы - Документация по MQL5
 
abeiks :

코드를 고칠 수 있습니까? 현재 바 의 시가 가 필요합니다. 미리 감사드립니다 .

"Symbol_" - 잘못된 매개변수, 밑줄이 앞에 있어야 합니다.

예, 복사된 요소의 수는 0입니다.

 

인사말! iCustom 을 통해 외부 표시기를 EA에 연결하면 입력 매개변수를 동적으로 변경할 수 없습니다 . iMA 이면 모든 것이 정상입니다. 모든 것이 상수 값으로 작동합니다. 두 개의 교환 가능한 문자열.

ma_handle = iCustom ( _Symbol , 0 , "Examples\\JJMA.ex5" ,MA, 4 );
   
ma_handle = iMA ( _Symbol , 0 , MA, 0 , MODE_EMA , PRICE_CLOSE ); 

이 경우 외부에서 변경할 수 없는 것은 무엇이며 어드바이저에 코드를 삽입합니까?

죄송합니다. 작동합니다. 훨씬 더 오래 걸립니다.

 
Karlson :

인사말! iCustom 을 통해 외부 표시기를 EA에 연결하면 입력 매개변수를 동적으로 변경할 수 없습니다 . iMA 이면 모든 것이 정상입니다. 모든 것이 상수 값으로 작동합니다. 두 개의 교환 가능한 문자열.

이 경우 외부에서 변경할 수 없는 것은 무엇이며 어드바이저에 코드를 삽입합니까?

표시기의 "...입력 매개변수를 동적으로 변경할 수 없습니다"?

표시기 입력을 전문가 입력으로 재생합니다 . 그리고 매번 새로운 틱보다 Expert Advisor를 초기화하는 동안 핸들을 한 번 얻는 것이 좋습니다.

 
Yedelkin :

표시기의 "...입력 매개변수를 동적으로 변경할 수 없습니다"?

표시기 입력을 전문가 입력으로 재생합니다 . 그리고 매번 새로운 틱보다 Expert Advisor를 초기화하는 동안 핸들을 한 번 얻는 것이 좋습니다.

내 평균 주기는 EA가 실행되는 동안 ATR에서 변경되므로 평균 핸들은 OnTick()에 배치됩니다.실제로 EA의 입력 매개변수는 ATR 주기이며 변경되지 않습니다.OnInit()의 ATR입니다.

 int OnInit ()
  {
  atr_handle = iATR ( _Symbol , 0 , ATR);   //инициализируем хэндл ATR
  }

void OnTick ()
  {
     CopyBuffer (atr_handle, 0 , 0 , 5 ,atr);   //заполняем массив ATR
     ArraySetAsSeries (atr, true );

     MA=( int )(atr[ 1 ]*kMA);                 //рассчитываем период требуемый для средней от ATR

   //ma_handle = iCustom(_Symbol,0,"Examples\\JJMA.ex5",MA,4);  // получаем хэндл средней
   
     ma_handle = iMA ( _Symbol , 0 , MA, 0 , MODE_EMA , PRICE_CLOSE );

     CopyBuffer (ma_handle, 0 , 0 , 5 ,ma);     //заполняем массив средней
     ArraySetAsSeries (ma, true ); 
  }
 
Karlson :

내 평균 주기는 EA가 실행되는 동안 ATR에서 변경되므로 평균 핸들은 OnTick()에 배치됩니다.실제로 EA 의 입력 매개변수는 ATR 주기이며 변경되지 않습니다.OnInit()의 ATR입니다.

거의 이해했습니다. 하지만 매번 새 틱에 표시기 핸들을 가져오기가 어렵습니다... 그리고 이전 핸들을 어디에 두나요?