어드바이저를 무작위로 모으는 방법 - 페이지 34

 

위험을 올바르게 처방하는 방법을 알아 냈습니다.

 #define Magic_Number 0
//+------------------------------------------------------------------+
//| Enum Lor or Risk                                                 |
//+------------------------------------------------------------------+
enum ENUM_LOT_OR_RISK
  {
   lots= 0 ,     // Constant lot
   risk= 1 ,     // Risk in percent
  };
//+------------------------------------------------------------------+


 input double    MaximumRisk             = 0.01 ;           // Maximum Risk in percentage
input double    DecreaseFactor          = 3 ;             // Descrease factor
input ENUM_LOT_OR_RISK InpLotOrRisk    = lots;           // Money management: Lot OR Risk 
   //+------------------------------------------------------------------+
   //| Calculate optimal lot size                                       |
   //+------------------------------------------------------------------+
   double             TradeSizeOptimized( void )
     {
       double price= 0.0 ;
       double margin= 0.0 ;
       //--- select lot size
       if (! SymbolInfoDouble ( _Symbol , SYMBOL_ASK ,price))
         return ( 0.0 );
       if (! OrderCalcMargin ( ORDER_TYPE_BUY , _Symbol , 1.0 ,price,margin))
         return ( 0.0 );
       if (margin<= 0.0 )
         return ( 0.0 );
       double lot= 0 ;
       //---
       switch (InpLotOrRisk)
        {
         case lots:
            lot=MaximumRisk;
             break ;
         case risk:
            lot= NormalizeDouble ( AccountInfoDouble ( ACCOUNT_MARGIN_FREE )*MaximumRisk/margin, 2 );
         default :
             break ;
        }
       //--- calculate number of losses orders without a break
       if (DecreaseFactor> 0 )
        {
         //--- select history for access
         HistorySelect ( 0 , TimeCurrent ());
         //---
         int     orders= HistoryDealsTotal ();   // total history deals
         int     losses= 0 ;                     // number of losses orders without a break

         for ( int i=orders- 1 ; i>= 0 ; i--)
           {
             ulong ticket= HistoryDealGetTicket (i);
             if (ticket== 0 )
              {
               Print ( "HistoryDealGetTicket failed, no trade history" );
               break ;
              }
             //--- check symbol
             if ( HistoryDealGetString (ticket, DEAL_SYMBOL )!= _Symbol )
               continue ;
             //--- check Expert Magic number
             if ( HistoryDealGetInteger (ticket, DEAL_MAGIC )!=Magic_Number)
               continue ;
             //--- check profit
             double profit= HistoryDealGetDouble (ticket, DEAL_PROFIT );
             if (profit> 0.0 )
               break ;
             if (profit< 0.0 )
               losses++;
           }
         //---
         if (losses> 1 )
            lot= NormalizeDouble (lot-lot*losses/DecreaseFactor, 1 );
        }
       //--- normalize and check limits
       double stepvol= SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_STEP );
      lot=stepvol* NormalizeDouble (lot/stepvol, 0 );

       double minvol= SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MIN );
       if (lot<minvol)
         lot=minvol;

       double maxvol= SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MAX );
       if (lot>maxvol)
         lot=maxvol;
       //--- return trading volume
       return (lot);

     }
   //+------------------------------------------------------------------+

여기서 lot - TradeSizeOptimized( ) 삽입

Expert에서 수정해야 합니다. 그렇지 않으면 바로 거기에 있지 않습니다.

 

이름 변경 - 전문가가 완료되었습니다. 모든 버그가 수정되었습니다. 제목 < 말의 움직임 ><말의 움직임>

말의 움직임

파일:
Horse_move.mq5  190 kb
 


알렉산드르 클라파튜크 :

이전 Expert에 수평선 에 대한 두 가지 방법이 추가되었습니다.

가능성 1: 라인 1은 주어진 거리에서 라인 4를 열 것이고, 라인 2 주어진 거리에서 라인 3을 열 것 입니다.

가능성 2: 라인 7은 주어진 거리에서 라인 10을 열고 가격을 따르고 가격이 에 닿으면 명령이 트리거됩니다. 라인 8은 주어진 거리에서 라인 9를 열 것입니다. - 7 및 10과 동일한 작업

#속성 버전 "1.01"

또 다른 가능성이 있었습니다. 1라인은 4와 9가 열릴 것이고, 2라인 은 3과 10이 열릴 것입니다.

7행은 10과 3을 엽니다. 8번 라인은 9번과 4번 을 엽니다.

 input string    t3= "------ Obj:Name 1-2-3-4 ------" ;     // Имя Объекта
input string    InpObjUpNameZ           = "TOP 1" ;       // Obj: TOP (Name Obj) ВВЕРХУ 1
input string    InpObjDownNameZ         = "LOWER 2" ;     // Obj: LOWER (Name Obj) ВНИЗУ 2
input int       Step                    = 5 ;             // Obj: Шаг сетки, пунктов(0 = false)
input string    InpObjDownName0         = "TOP 3" ;       // Obj: TOP (Name Obj) ВВЕРХУ 3
input ENUM_TRADE_COMMAND InpTradeCommand=open_sell;     // Obj:  command:
input string    InpObjUpName0           = "LOWER 4" ;     // Obj: LOWER (Name Obj) ВНИЗУ 4
input ENUM_TRADE_COMMAND InpTradeCommand0=open_buy;     // Obj:  command:
 input string    t5= "- 2_Obj:Trailing Line 7-8-9-10 --- " ; // Trailing Obj:Line
input string    InpObjUpNameZx          = "TOP 7" ;       // Obj: TOP (Name Obj) ВВЕРХУ 7
input string    InpObjDownNameZx        = "LOWER 8" ;     // Obj: LOWER (Name Obj) ВНИЗУ 8
input int       StepZx                  = 5 ;             // Obj: Шаг сетки, пунктов(0 = false)
input string    InpObjUpNameX           = "TOP 9" ;       // Obj: TOP (Horizontal Line) ВВЕРХУ 9
input ENUM_TRADE_COMMAND InpTradeCommandX=open_buy;     // Obj:  command:
input string    InpObjDownNameX         = "LOWER 10" ;     // Obj: LOWER (Horizontal Line) ВНИЗУ 10
input ENUM_TRADE_COMMAND InpTradeCommand0X=open_sell;   // Obj:  command:
input ushort    InpObjTrailingStopX     = 5 ;             // Obj: Trailing Stop (distance from price to object, in pips)
input ushort    InpObjTrailingStepX     = 5 ;             // Obj: Trailing Step, in pips (1.00045-1.00055=1 pips)

위치가 반대로 열리고 설정 Obj: 명령 을 건드리지 않도록 합니다.

반전이 있다

 input string    t6= "------ Obj: Revers Buy and Sell --" ; // Obj: Revers Buy and Sell
input bool      ObjRevers               = false ;         // Obj: Revers
파일:
Horse_move.mq5  190 kb
2.mq5  17 kb
 
Aleksandr Klapatyuk :

#속성 버전 "1.01"

또 다른 가능성이 있었습니다. 1라인은 4와 9가 열릴 것이고, 2라인 은 3과 10이 열릴 것입니다.

7행은 10과 3을 엽니다. 8번 라인은 9번과 4번 을 엽니다.

위치가 반대로 열리고 설정 Obj: 명령 을 건드리지 않도록 합니다.

반전이 있다

이제 테스트를 시작했습니다. 월말까지는 만지지 않을 것입니다. 어떻게 되는지 궁금합니다. -많은, 위험에 처해 -그 자신이 어떻게 든 계산합니다.

시험

 

별로! 느리지만 증가하는

테스트1

 

예! 그는 바로 앞이다

알파리 MT5

 
Aleksandr Klapatyuk :

이름 변경 - 전문가가 완료되었습니다. 모든 버그가 수정되었습니다. 제목 < 말의 움직임 ><말의 움직임>

흥미로운 고문.

 

입력 설정에서 설정 이중 TargetProfit = 30000.00 ; // 목표 이익

아마도 충분하지 않을 것입니다. 더 필요했습니다. 이제 새 진입점을 기다리고 TargetProfit = 35000.00 대상을 설정해야 합니다 . // 목표 이익

 //+------------------------------------------------------------------+
input string    t0= "------ Parameters --------" ;         // Настройка Эксперта
input string    Template                = "ADX" ;         // Имя шаблона(without '.tpl')
input datetime HoursFrom               = D'1970.01.01' ; // Время старта Эксперта
input datetime HoursTo                 = D'2030.12.31' ; // Время закрытия всех позиций
input double    TargetProfit            = 900000.00 ;     // Целевая прибыль
input uint      maxLimits               = 1 ;             // Кол-во Позиции Открыть в одну сторону
input double    MaximumRisk             = 0.01 ;           // Maximum Risk in percentage
input double    DecreaseFactor          = 3 ;             // Descrease factor
input ENUM_LOT_OR_RISK InpLotOrRisk    = lots;           // Money management: Lot OR Risk

표시기 피벗 라인 timezone.mq5에서 R2 -down S2-up 위치를 엽니다.

스냅샷1

표시기는 삭제할 수 없습니다. 해당 행은 다음날 업데이트됩니다.

알파리 MT5

표시기가 아래에 있습니다. 이제 표시기 https://www.mql5.com/ru/code/1114 에 대한 링크를 사이트에서 찾을 것입니다.

파일:
 
Aleksandr Klapatyuk :

입력 설정에서 설정 이중 TargetProfit = 30000.00 ; // 목표 이익

아마도 충분하지 않을 것입니다. 더 필요했습니다. 이제 새 진입점을 기다리고 TargetProfit = 35000.00 대상을 설정해야 합니다 . // 목표 이익

표시기 피벗 라인 timezone.mq5에서 R2 -down S2-up 위치를 엽니다.

표시기는 삭제할 수 없습니다. 해당 행은 다음날 업데이트됩니다.

표시기가 아래에 있습니다. 이제 표시기 https://www.mql5.com/ru/code/1114 에 대한 링크를 사이트에서 찾을 것입니다.

이것은 옵션 중 하나입니다. 그러나 백만 가지 옵션이 있습니다

로트에 대해 말하는 것을 잊었습니다 - 위험 입력 으로 설정 ENUM_LOT_OR_RISK InpLotOrRisk = lot; // 자금 관리: Lot OR 위험

(.log의 전문가 정보) 경고 https://www.mql5.com/ru/docs/event_handlers/ondeinit
Документация по MQL5: Обработка событий / OnDeinit
Документация по MQL5: Обработка событий / OnDeinit
  • www.mql5.com
//| Expert initialization function                                   | //| Expert deinitialization function                                 | //| Возвращает текстовое описания причины деинициализации            |
파일:
20191107.log  272 kb
 

#속성 버전 "1.02"

버튼에 대한 다른 방법을 찾았습니다.

 //+------------------------------------------------------------------+
//| Enum ENUM_BUTTON                                                 |
//+------------------------------------------------------------------+
enum ENUM_BUTTON
  {
   Button0= 0 ,   // ВЫКЛ
   Button1= 1 ,   // ВКЛ
   Button2= 2 ,   // ВКЛ: AVGiS
  };
//+------------------------------------------------------------------+

여기에서 선택

 input string    t9= "------ Button: AVGiS -----" ;         // AVGiS (Или обычный режим Buy/Sell)
input ENUM_BUTTON Buttons              = Button0;       // Вкл: Копки Buy/Sell
input bool      ObjectLineX             = false ;         // Button: Horizontal Line(true) || Buy/Sell(false)
input bool      TickRevers              = false ;         // Button: Revers
input int       TrailingStop_STOP_LEVEL = 350 ;           // Trailing Stop LEVEL
input ENUM_TIMEFRAMES _period          = PERIOD_CURRENT ; // period
input int       limit_total_symbol      = 190 ;           // limit_total_symbol
input int       limit_total             = 190 ;           // limit_total
//---

포지션을 열 때 즉시 손절매가 배치됩니다(노란색 수평선 )

여기에서 구성 가능 - 입력 이중 InpStopLoss = 55 ; // Obj: 손절매, 핍(1.00045-1.00055=1 핍)

비활성화 0으로 설정

 input string    t2= "------ Obj:Trailing Line     --- " ;   // Trailing Obj:Line
input double    InpStopLoss             = 55 ;             // Obj: Stop Loss, in pips (1.00045-1.00055=1 pips)
input ushort    InpObjTrailingStop      = 27 ;             // Obj: Trailing Stop (distance from price to object, in pips)
input ushort    InpObjTrailingStep      = 9 ;             // Obj: Trailing Step, in pips (1.00045-1.00055=1 pips)
파일:
Horse_move.mq5  198 kb
2.mq5  17 kb