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

 
여러분, 프로그래머. 무슨 일이야??? 반나절 플러스 다음 날 아침에 단말기를 켜고 저녁에 일하러 갔습니다. 거래가 한 건도 없었습니다. Martingale은 손실의 경우 많은 양을 늘립니다. - 거래, 그 외의 경우는 표준 로트입니다.
 void OnTick ()
  {
   datetime EaStartTime = StringToTime (StartTime);   // время начала работы советника
   datetime EaEndTime = StringToTime (EndTime);       // время окончания работы советника
   datetime CurrTime = TimeCurrent ();               // это если нужно взять время терминала
   if (CurrTime<EaStartTime || CurrTime>=EaEndTime)
       return ;                                       // если еще не время торговать - выход
     {
      MacdCurrent= iMACD ( NULL , 0 ,InpFastEMA,InpSlowEMA,InpSignalSMA,Macd_Applied_Price,MODE_MAIN, 0 );
      SignalCurrent= iMACD ( NULL , 0 ,InpFastEMA,InpSlowEMA,InpSignalSMA,Macd_Applied_Price,MODE_SIGNAL, 0 );
      SignalMAPrevious= iMA ( NULL , 0 ,InpMAPeriod,InpMAShift,InpMAMethod,MA_Applied_Price, 1 );
      SignalMAThis= iMA ( NULL , 0 ,InpMAPeriod,InpMAShift,InpMAMethod,MA_Applied_Price, 0 );
      SignalParabolic= iSAR ( NULL , 0 ,InpSARStep,InpSARMaximum, 0 );
      SignalStochastic_5= iStochastic ( NULL , 5 ,InpKPeriod,InpDPeriod,InpSlowing, MODE_SMA , 0 , 1 , 0 );
      MainStochastic_5= iStochastic ( NULL , 5 ,InpKPeriod,InpDPeriod,InpSlowing, MODE_SMA , 0 , 0 , 0 );
      SignalStochastic= iStochastic ( NULL , 0 ,InpKPeriod,InpDPeriod,InpSlowing, MODE_SMA , 0 , 1 , 0 );
      MainStochastic= iStochastic ( NULL , 0 ,InpKPeriod,InpDPeriod,InpSlowing, MODE_SMA , 0 , 0 , 0 );
      SignalCCIPrevious= iCCI ( NULL , 0 ,InpCCIPeriod, 0 , 1 );
      SignalCCIThis= iCCI ( NULL , 0 ,InpCCIPeriod, 0 , 0 );
       if (CountTrades()== 0 ) CheckForOpen();
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
 { if (ModLots())
  {
       //-----Ставим ордер на покупку.
     if (SignalCurrent<MacdCurrent && SignalMAPrevious<SignalMAThis && 
      Ask>SignalParabolic && SignalStochastic_5<MainStochastic_5&&SignalStochastic<MainStochastic&&
      SignalCCIPrevious<SignalCCIThis)
      {
       ticket= OrderSend ( NULL ,OP_BUY,lot,Ask,slippage, 0 , 0 ,exptime,magic, 0 ,Blue);
       if (ticket> 0 )
           return ;
      }
//-----Ставим ордер на продажу.
     if (SignalCurrent>MacdCurrent && SignalMAPrevious>SignalMAThis && 
      Bid<SignalParabolic && SignalStochastic_5>MainStochastic_5&&SignalStochastic>MainStochastic&&
      SignalCCIPrevious>SignalCCIThis)
      {
       ticket= OrderSend ( NULL ,OP_SELL,lot,Bid,slippage, 0 , 0 ,exptime,magic, 0 ,Red);
       if (ticket> 0 )
           return ;
      }
  }
 }
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count= 0 ;
   for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
     {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
        {
         if (OrderSymbol()== Symbol () && OrderMagicNumber()==magic)
            count++;
        }
     }
   return (count);
  }
//+------------------------------------------------------------------+
bool ModLots()
  {
     for ( int i=OrdersHistoryTotal()- 1 ;i>= 0 ;i--)
      {
       if (! OrderSelect (i,SELECT_BY_POS,MODE_HISTORY)) continue ;
       if ((OrderMagicNumber()==magic) && (OrderSymbol()== Symbol ()))
         {
           if (OrderProfit()< 0 )
            {lot=OrderLots()*LotMarti;   break ;}
           else { lot=Lots; break ;}
         }
      }
   return ( true );
  }
//+------------------------------------------------------------------+
 
안녕하세요. mql4 참조에 따르면 전략 테스터에서 Timer 및 ChartEvent 이벤트 처리가 지원되지 않습니다. 따라서 버튼(OBJ_BUTTON)이 작동하지 않습니다(더 정확하게는 눌려도 아무 일도 일어나지 않음). 그러나 어떤 이유로 이 규칙은 Expert Advisor의 평가판에는 적용되지 않습니다. 왜 이런 일이 발생하고 테스터에서 버튼이 작동하도록 하는 방법을 알려주시겠습니까?
 
Maks_Knyazev :
안녕하세요. mql4 참조에 따르면 전략 테스터에서 Timer 및 ChartEvent 이벤트 처리가 지원되지 않습니다. 따라서 버튼(OBJ_BUTTON)이 작동하지 않습니다(더 정확하게는 눌려도 아무 일도 일어나지 않음). 그러나 어떤 이유로 이 규칙은 Expert Advisor의 평가판에는 적용되지 않습니다. 왜 이런 일이 발생하고 테스터에서 버튼이 작동하도록 하는 방법을 알려주시겠습니까?

예, 작동하지 않습니다. 테스터에서 다음과 같이 버튼을 수동으로 확인해야 합니다.

CButton *cbSell, *cbBuy;

//проверяем из OnTick в тестере 
void CheckButtons()
{
     if (cbSell.Pressed())
    {
        OpenOrderWithCheck2( Symbol (), OP_SELL, 0.1 , Bid, 50 , 0 , 0 , "" , 1 , 0 , clrDeepSkyBlue );
        cbSell.Pressed( false );
    }    
     if (cbBuy.Pressed())
    {
        OpenOrderWithCheck2( Symbol (), OP_BUY, 0.1 , Bid, 50 , 0 , 0 , "" , 1 , 0 , clrRed );
        cbBuy.Pressed( false );
    }
     ChartRedraw ();
}

 
Alexey Volchanskiy :

예, 작동하지 않습니다. 테스터에서 다음과 같이 버튼을 수동으로 확인해야 합니다.

매우 감사합니다! 그런 순간을 묘사한 문헌이 있습니까?
 

flint17480 , 2016.02.01 08:58

안녕하세요. EURUSD 쌍에 대한 분 촛불 09-47에서 이익이 마감되지 않았으며 이익은 1.08428에 서 있었고 촛불은 1.08420에 있었습니다. 어떻게 해야할지 말해줘? 미리 감사드립니다.
 

flint17480 , 2016.02.01 08:58

안녕하세요. EURUSD 쌍에 대한 분 촛불 09-47에서 이익이 마감되지 않았으며 이익은 1.08428에 서 있었고 촛불은 1.08420에 있었습니다. 어떻게 해야할지 말해줘? 미리 감사드립니다.

추가 정보 필요:

  1. 오픈 포지션 유형: 매도 또는 매수?
  2. 단말기 가격은 BID로 뽑는거 아시죠?

 
Karputov Vladimir :

flint17480 , 2016.02.01 08:58

안녕하세요. EURUSD 쌍에 대한 분 촛불 09-47에서 이익이 마감되지 않았으며 이익은 1.08428에 서 있었고 촛불은 1.08420에 있었습니다. 어떻게 해야할지 말해줘? 미리 감사드립니다.

매도 포지션은 Ask에 의해 마감되고 캔들은 Bid에 의해 종료되므로 스프레드에 주의하십시오. 8핍 이상의 5자리 스프레드는 대부분의 통화 쌍에서 정상입니다.

 
Karputov Vladimir :

flint17480 , 2016.02.01 08:58

안녕하세요. EURUSD 쌍에 대한 분 촛불 09-47에서 이익이 마감되지 않았으며 이익은 1.08428에 서 있었고 촛불은 1.08420에 있었습니다. 어떻게 해야할지 말해줘? 미리 감사드립니다.
틱 따옴표를 작성하십시오. 내 펜을 던져? 코드 베이스에 많은 것들이 있지만. 당신이 확산에 대해 옳았다.
 
모두 좋은 오후입니다) 모바일 정지 손실 에 대한 코드를 공유하십시오-그래서 가격을 따르십시오))) 미리 감사드립니다
 
Tema97 :
모두 좋은 오후입니다) 모바일 정지 손실 에 대한 코드를 공유하십시오-그래서 가격을 따르십시오))) 미리 감사드립니다
왜 후행 정지가 마음에 들지 않았습니까? 이미 터미널에 내장되어 있습니다.
사유: