초보자의 질문 MQL4 MT4 MetaTrader 4 - 페이지 58

 
직접 코드를 작성하는 방법을 배우고 싶습니다.. 그래서 조언을 구하기로 했습니다. 누군가가 샘플을 줄 것이라고 생각했습니다.. 감사합니다!
 
Stafort :
직접 코드를 작성하는 방법을 배우고 싶습니다.. 그래서 조언을 구하기로 했습니다. 누군가가 샘플을 줄 것이라고 생각했습니다.. 감사합니다!
여기 에 많은 샘플이 있으며 가장 적합한 샘플을 선택하고 필요에 맞게 편집합니다. 그렇지 않은 경우 언제든지 이 포럼에서 질문하고 답변을 얻을 수 있습니다.
 
고객은 EA가 차트에서 제거되었음에도 불구하고 EA가 계속 거래를 개시한다고 불평합니다. 똑같을순 없나요?
그리고 차트에서 제거하지 않고 Expert Advisor로 창을 닫으면 작동합니까?
고맙습니다.
[삭제]  
Vladimir Tkach :
고객은 EA가 차트에서 제거되었음에도 불구하고 EA가 계속 거래를 개시한다고 불평합니다. 똑같을순 없나요?
그리고 차트에서 제거하지 않고 Expert Advisor로 창을 닫으면 작동합니까?
고맙습니다.

제거되고 올바르게 작성된 경우 - 없어야 합니다. 초기화 해제 코드로 언로딩 - 1. EA가 막히면... 해결해야 합니다...

Expert Advisor로 창을 닫으면 Expert Advisor가 초기화 해제 코드 - 4로 언로드되어야 합니다.

REASON_CHARTCLOSE

4

차트 닫힘


https://www.mql5.com/ru/docs/constants/namedconstants/uninit

Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации
  • www.mql5.com
Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
MONTE_CRISTO :
글쎄, 내가 새는 따옴표와 좋은 품질의 tixtory를 기억하는 한 메타 따옴표가 있습니다.
DC에서 MT5로 계정을 개설하면 실제 "찢어지지 않은" 견적이 나옵니다. 질문은 무엇입니까? tixtory에서도 가끔 쓰레기가 나오거나 요리하는 법을 배운 적이 없지만 MT5를 사용하면 내보내기가 더 쉽고 빠릅니다.
 
Sergey Gritsay :
어떤 종류의 라인을 원하는지 이해하기 위한 스크린샷
세르게이 그리트제이 :
병합하려는 라인을 이해하기 위한 스크린샷.
세르게이 그리트제이 :
병합하려는 라인을 이해하기 위한 스크린샷. 당신의 답변에 감사드립니다! MT4에서 두 개의 상단 악기 라인을 하나로 결합하고 싶습니다.
 

변수 dT의 빨간색은 무엇을 의미합니까?


 
Andrei :

변수 dT의 빨간색은 무엇을 의미합니까?


입력 변수 "extern"으로 선언
 
사람들! 말하다. 테스터는 오류를 제공합니다: 2017.02.08 18:24:43.751 TestGenerator: 일치하지 않는 데이터 오류(2016.07.27 19:30의 낮은 값 1.09860은 최소 시간 프레임에서 도달하지 않음, 낮은 가격 1.09880 불일치)
이것은 무엇을 의미하며 어떻게 수정합니까? 내가 뭘 잘못했어?
double Margin_Percent= AccountFreeMargin ()*Percent/ 100 ; //Используемые средства для открытия ордеров
double Lots=Margin_Percent/ MarketInfo ( Symbol (), MODE_MARGINREQUIRED ); //Определение общего количества лотов
double Lots_Volume=( MathFloor (Lots)+ MarketInfo ( Symbol (), MODE_LOTSTEP ));
double MacdCurrent= iMACD ( NULL , 0 ,Fast_EMA_Period,Slow_EMA_Period,Signal_Period, PRICE_CLOSE , MODE_MAIN , 1 ); //Параметры MACD основной линии текущего бара
double MacdPrevious1= iMACD ( NULL , 0 ,Fast_EMA_Period,Slow_EMA_Period,Signal_Period, PRICE_CLOSE , MODE_MAIN , 2 ); //Параметры MACD основной линии предыдущего бара
double MacdPrevious2= iMACD ( NULL , 0 ,Fast_EMA_Period,Slow_EMA_Period,Signal_Period, PRICE_CLOSE , MODE_MAIN , 3 ); //Параметры MACD основной линии со смещением на 2 бара
double StopLoss= iSAR ( NULL , 0 ,Step_PSAR,Maximum_PSAR, 0 ); //Параметры Трейлинг стоп по параметрам ParabolicSAR текущего бара
double Previous_StopLoss= iSAR ( NULL , 0 ,Step_PSAR,Maximum_PSAR, 1 ); //Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара
double CurrentPSAR= iSAR ( NULL , 0 ,Step_PSAR,Maximum_PSAR, 1 ); //Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   static datetime New_Time= TimeCurrent (); // Время текущего бара
   bool New_Bar= false ;                     // Флаг нового бара
   int ticket,total,cnt;
//---------------------------------------------------------------------------
   total= OrdersTotal (); // Опредление количства ордеров
   if (total< 1 )
     {
       //--- нет открытых ордеров
       if (Margin_Percent< MarketInfo ( Symbol (), MODE_MARGINREQUIRED )*( MarketInfo ( Symbol (), MODE_MINLOT )))
         //Проверка на наличие денежных средств для открытия минимального лота
        {
         Print ( "Не хватает средств. Свободные средства = " , AccountFreeMargin ());
         return ;
        }
       if ( Time [ 0 ]==New_Time) // Сравниваем время
        {
         New_Bar= true ;       // Поймался новый бар
         if (New_Bar== false )     // Если бар не новый..
             return ;             // ..то уходим  
        }
       //Определение количества лотов
       if (Lots>Lots_Volume)
         Lots=Lots_Volume;
       else if (Lots<Lots_Volume)
         Lots= MathFloor (Lots);
       return ;
       //--- условие для открытия длинной позиции (BUY)
       if (CurrentPSAR< iOpen ( NULL , 0 , 1 ) &&
         ((MacdPrevious1> 0 && MacdPrevious2< 0 ) ||
         (MacdCurrent> 0 && MacdPrevious1< 0 ) ||
         (MacdCurrent> 0 && MacdPrevious1== 0 && MacdPrevious2< 0 )||
         (MacdCurrent> 0 && MacdPrevious1== 0 && MacdPrevious2== 0 )))
        {
         ticket= OrderSend ( Symbol (), OP_BUY ,Lots, Ask , 3 ,StopLoss+ MarketInfo ( Symbol (), MODE_STOPLEVEL )* Point , 0 , NULL ,MAGICNUMBER, 0 ,Green);
         if (ticket> 0 ) //проверка отрытия позиции
           {
             if ( OrderSelect (ticket, SELECT_BY_TICKET , MODE_TRADES ))
               Print ( "BUY ордер открыт : " , OrderOpenPrice ());
             else Print ( "Ошибка открытия ордера BUY : " , GetLastError ());
             return ;
           }
        }
       //--- условие для открытия короткой позиции (SELL)
       if (CurrentPSAR> iOpen ( NULL , 0 , 1 ) &&
         ((MacdCurrent< 0 && MacdPrevious1> 0 ) ||
         (MacdPrevious1< 0 && MacdPrevious2> 0 ) ||
         (MacdCurrent< 0 && MacdPrevious1< 0 && MacdPrevious2> 0 ) ||
         (MacdCurrent< 0 && MacdPrevious1== 0 && MacdPrevious2== 0 )))
        {
         ticket= OrderSend ( Symbol (), OP_SELL ,Lots, Bid , 3 ,StopLoss- MarketInfo ( Symbol (), MODE_STOPLEVEL )* Point , 0 , NULL ,MAGICNUMBER, 0 ,Red);
         if (ticket> 0 ) //проверка открытия позиции
           {
             if ( OrderSelect (ticket, SELECT_BY_TICKET , MODE_TRADES ))
               Print ( "SELL ордер открыт : " , OrderOpenPrice ());
             else Print ( "Ошибка открытия ордера SELL : " , GetLastError ());
             return ;
           }
        }
       return ; //--- выход из блока "нет открытых ордеров"
     }
//--- важно правильно войти в рынок, но более важно правильно из него выйти  
   for (cnt= 0 ;cnt<total;cnt++)
     {
       if (! OrderSelect (cnt, SELECT_BY_POS , MODE_TRADES ))
         continue ;
       if ( OrderMagicNumber ()==MAGICNUMBER && // проверка магического номера ордера
         OrderSymbol ()== Symbol ()) // проверка символа ордера
        {
         //--- длинная позиция открыта
         if ( OrderType ()== OP_BUY )
           {
             //--- должен быть закрыт?
             if (CurrentPSAR> iOpen ( NULL , 0 , 1 ) &&
               ((MacdCurrent< 0 && MacdPrevious1> 0 ) ||
               (MacdPrevious1< 0 && MacdPrevious2> 0 ) ||
               (MacdCurrent< 0 && MacdPrevious1< 0 && MacdPrevious2> 0 ) ||
               (MacdCurrent< 0 && MacdPrevious1== 0 && MacdPrevious2== 0 )))
              {
               //--- закрытие ордера и выход
               if ( OrderClose ( OrderTicket (), OrderLots (), Bid , 3 ,Violet))
                 {
                   Print ( "Ордер закрыт" );
                  ticket= OrderSend ( Symbol (), OP_SELL ,Lots, Bid , 3 ,StopLoss- MarketInfo ( Symbol (), MODE_STOPLEVEL )* Point , 0 , NULL ,MAGICNUMBER, 0 ,Red);
                   if (ticket> 0 ) //проверка открытия позиции
                    {
                     if ( OrderSelect (ticket, SELECT_BY_TICKET , MODE_TRADES ))
                         Print ( "SELL ордер открыт : " , OrderOpenPrice ());
                     else Print ( "Ошибка открытия ордера SELL : " , GetLastError ());
                     return ;
                    }
                 }
               else Print ( "Ошибка закрытия ордера " , GetLastError ());

              }
             //------------------Модификация ордера по СтопЛоссу
             else if (StopLoss>Previous_StopLoss && StopLoss< iOpen ( NULL , 0 , 0 ))
              {
               if ( OrderModify ( OrderTicket (), OrderOpenPrice (),StopLoss+ MarketInfo ( Symbol (), MODE_STOPLEVEL )* Point , 0 , 0 ,Blue))
                   Print ( "Цена Stop Loss ордера успешно модифицирована." );
               else Print ( "Ошибка модификации ордера. Код ошибки=" , GetLastError ());
               return ;
              }
             return ;
           }
         // идём на короткую позицию
         else if ( OrderType ()== OP_SELL )
           {
             //--- должен быть закрыт?
             if (CurrentPSAR< iOpen ( NULL , 0 , 1 ) &&
               ((MacdPrevious1> 0 && MacdPrevious2< 0 ) ||
               (MacdCurrent> 0 && MacdPrevious1< 0 ) ||
               (MacdCurrent> 0 && MacdPrevious1== 0 && MacdPrevious2< 0 )||
               (MacdCurrent> 0 && MacdPrevious1== 0 && MacdPrevious2== 0 )))
              {
               //--- закрытие ордера и выход
               if ( OrderClose ( OrderTicket (), OrderLots (), Ask , 3 ,Violet))
                 {
                   Print ( "Ордер закрыт" );
                  ticket= OrderSend ( Symbol (), OP_BUY ,Lots, Ask , 3 ,StopLoss+ MarketInfo ( Symbol (), MODE_STOPLEVEL )* Point , 0 , NULL ,MAGICNUMBER, 0 ,Green);
                   if (ticket> 0 ) //проверка отрытия позиции
                    {
                     if ( OrderSelect (ticket, SELECT_BY_TICKET , MODE_TRADES ))
                         Print ( "BUY ордер открыт : " , OrderOpenPrice ());
                     else Print ( "Ошибка открытия ордера BUY : " , GetLastError ());
                     return ;
                    }
                 }
               else Print ( "Ошибка закрытия ордера " , GetLastError ());
              }
             //-----------------Модификация ордера по СтопЛоссу            
             else if (StopLoss<Previous_StopLoss && StopLoss> iOpen ( NULL , 0 , 0 ))
              {
               if ( OrderModify ( OrderTicket (), OrderOpenPrice (),StopLoss- MarketInfo ( Symbol (), MODE_STOPLEVEL )* Point , 0 , 0 ,Blue))
                   Print ( "Цена Stop Loss ордера успешно модифицирована." );
               else Print ( "Ошибка модификации ордера. Код ошибки=" , GetLastError ());
               return ;
              }
           }
        }
     }
//------
  }
//-------------------------------------------------------------------------------------------------------
 
Michail_David :
사람들! 말하다. 테스터는 오류를 제공합니다: 2017.02.08 18:24:43.751 TestGenerator: 일치하지 않는 데이터 오류(2016.07.27 19:30의 낮은 값 1.09860은 최소 시간 프레임에서 도달하지 않음, 낮은 가격 1.09880 불일치)
이것은 무엇을 의미하며 어떻게 수정합니까? 내가 뭘 잘못했어?
문제는 인용문이며 품질이 좋지 않습니다.