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

 
Лауреат :

예, 유투브에서 동영상을 찾지 못했습니다. 그리고 문서는 가장 똑똑한 사람들을 위한 것입니다.

YouTube가 우리의 전부입니까? 남북도 어디야, 유튜브 영상에서 알 수 있니?

 

Expert Advisor가 시작되면 두 개의 이동 평균이 차트에 추가됩니다( ChartIndicatorAdd 기능). 두 이동 평균은 모두 빨간색으로 표시됩니다. 프로그래밍 방식으로 다른 색상으로 페인트하는 방법은 무엇입니까?

 
Kvin_ :

Expert Advisor가 시작되면 두 개의 이동 평균이 차트에 추가됩니다( ChartIndicatorAdd 기능). 두 이동 평균은 모두 빨간색으로 표시됩니다. 프로그래밍 방식으로 다른 색상으로 페인트하는 방법은 무엇입니까?

설명서 에는 모든 것이 명확하게 쓰여 있습니다.

추가 작업을 수행할 수 있는 칠면조 핸들을 만들 때 다음 행에 매개변수를 설정할 수 있습니다.

indicator_handle= iMACD (symbol,period,fast_ema_period,slow_ema_period,signal_period,apr);
 
Artyom Trishkin :

YouTube가 우리의 전부입니까? 남북도 어디야, 유튜브 영상에서 알 수 있니?

물론 당신은 똑똑합니다.

 
Kvin_ :

Expert Advisor가 시작되면 두 개의 이동 평균이 차트에 추가됩니다( ChartIndicatorAdd 기능). 두 이동 평균은 모두 빨간색으로 표시됩니다. 프로그래밍 방식으로 다른 색상으로 페인트하는 방법은 무엇입니까?

특별한 설정인 색상이 있는 사용자 지정 표시기를 사용합니다.

사용자 정의 이동 평균 입력 색상 코드의 예:

두 개의 iMA EA 교차의 예에서 이제 시각적 전략 테스터에서 세 가지 지표의 호출이 시각적으로 구별됩니다.

두 개의 iMA 교차

 
Vladimir Karputov :

특별한 설정인 색상이 있는 사용자 지정 표시기를 사용합니다.

사용자 정의 이동 평균 입력 색상 코드의 예:

두 개의 iMA EA 교차의 예에서 이제 시각적 전략 테스터에서 세 가지 지표의 호출이 시각적으로 구별됩니다.

필요한 것. 고맙습니다!
 

정확한 로트 승수를 설정할 수 없습니다.

이전에는 코드베이스의 어드바이저에서 이전 로트에 2를 곱했습니다.

 if (last_position_type== POSITION_TYPE_BUY && m_symbol. Bid ()+count_positions*ExtStep<last_position_price_open)
         m_trade.Sell(last_position_volume* 2 ,m_symbol.Name());

나는 변경했다

 input double    KLot              = 1.5 ;     //Коэффициент умножения лота
//------------------------------------------
if (last_position_type== POSITION_TYPE_BUY && m_symbol. Bid ()+count_positions*ExtStep<last_position_price_open)
         m_trade.Sell(last_position_volume*KLot,m_symbol.Name());


잘못된 로트 크기를 받았습니다.

 
ilyav :

정확한 로트 승수를 설정할 수 없습니다.

이전에는 코드베이스의 어드바이저에서 이전 로트에 2를 곱했습니다.

나는 변경했다

잘못된 로트 크기를 받았습니다.

산술 연산을 수행한 후 로트를 이 기호의 로트 크기 단계와 일치시켜야 합니다.

예시: Coin Flip lot 계산 및 BUY 확인

 //+------------------------------------------------------------------+
//| Open Buy position                                                |
//+------------------------------------------------------------------+
void OpenBuy( double sl, double tp)
  {
   sl=m_symbol.NormalizePrice(sl);
   tp=m_symbol.NormalizePrice(tp);

   double check_open_long_lot= 0.0 ;
   if (Risk> 0.0 )
     {
      check_open_long_lot=m_money.CheckOpenLong(m_symbol. Ask (),sl);
       Print ( "sl=" , DoubleToString (sl,m_symbol. Digits ()),
             ", CheckOpenLong: " , DoubleToString (check_open_long_lot, 2 ),
             ", Balance: " ,     DoubleToString (m_account.Balance(), 2 ),
             ", Equity: " ,     DoubleToString (m_account.Equity(), 2 ),
             ", FreeMargin: " , DoubleToString (m_account.FreeMargin(), 2 ));
       if (check_open_long_lot== 0.0 )
        {
         Print ( __FUNCTION__ , ", ERROR: method CheckOpenLong returned the value of \"0.0\"" );
         return ;
        }
     }
   else
      check_open_long_lot=InpLots;
   if (last_lots_sl> 0.0 )
      check_open_long_lot=last_lots_sl*InpMartingale;
   if (check_open_long_lot>InpMaxLots)
     {
       Print ( __FUNCTION__ , ", ERROR: check_open_long_lot (" , DoubleToString (check_open_long_lot, 2 ), ") > \"Max lots\" (" , DoubleToString (check_open_long_lot, 2 ), ")" );
       ExpertRemove ();
       return ;
     }
   check_open_long_lot= LotCheck (check_open_long_lot);
   if (check_open_long_lot== 0 )
     {
       Print ( __FUNCTION__ , ", ERROR: LotCheck -> 0.0" );
       return ;
     }
//--- check volume before OrderSend to avoid "not enough money" error (CTrade)
   double check_volume_lot=m_trade.CheckVolume(m_symbol.Name(),check_open_long_lot,m_symbol. Ask (), ORDER_TYPE_BUY );
   if (check_volume_lot!= 0.0 )
     {
       if (check_volume_lot>=check_open_long_lot)
        {
         if (m_trade.Buy(check_open_long_lot, NULL ,m_symbol. Ask (),sl,tp))
           {
             if (m_trade.ResultDeal()== 0 )
              {
               Print ( "#1 Buy -> false. Result Retcode: " ,m_trade.ResultRetcode(),
                     ", description of result: " ,m_trade.ResultRetcodeDescription());
               PrintResult(m_trade,m_symbol);
              }
             else
              {
               Print ( "#2 Buy -> true. Result Retcode: " ,m_trade.ResultRetcode(),
                     ", description of result: " ,m_trade.ResultRetcodeDescription());
               PrintResult(m_trade,m_symbol);
              }
           }
         else
           {
             Print ( "#3 Buy -> false. Result Retcode: " ,m_trade.ResultRetcode(),
                   ", description of result: " ,m_trade.ResultRetcodeDescription());
            PrintResult(m_trade,m_symbol);
           }
        }
       else
        {
         string text= "" ;
         if (Risk> 0.0 )
            text= "< method CheckOpenLong (" + DoubleToString (check_open_long_lot, 2 )+ ")" ;
         else
            text= "< Lots (" + DoubleToString (InpLots, 2 )+ ")" ;
         Print ( __FUNCTION__ , ", ERROR: method CheckVolume (" , DoubleToString (check_volume_lot, 2 ), ") " ,
               text);
         return ;
        }
     }
   else
     {
       Print ( __FUNCTION__ , ", ERROR: method CheckVolume returned the value of \"0.0\"" );
       return ;
     }
//---
  }
 

안녕하세요 이 질문:

표시기의 버퍼/라인 수를 동적으로 변경할 수 있습니까?

 
Andrii Djola :

안녕하세요 이 질문:

표시기의 버퍼/라인 수를 동적으로 변경할 수 있습니까?

금지되어 있습니다.

사유: