MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1816

 
Alexander Avksentyev # :

방해해서 죄송합니다.

이것은 중요하지 않습니다. 모른다고 말하는 것을 두려워하지 마십시오. 항상 물어보십시오.

지금 예시를 올리고 있습니다.
 
Alexander Avksentyev # :

"iTrailStart" 및 "iTrailDist"가 무엇입니까?

 
Tretyakov Rostyslav # :

"iTrailStart" 및 "iTrailDist"가 무엇입니까?

포함할 포인트 수 및 시장에서 tsl까지의 거리

iTrailStart = 10; //후행을 활성화할 포인트 수;

iTrailDist = 10; //정류장에서 시장까지의 거리;

주문이 11p까지라면 손실 없이 11-10=1p입니다.

 
Alexander Avksentyev # :

포함할 포인트 수 및 시장에서 tsl까지의 거리

이 같은

 //--- input parameters
int iTrailStart   = 10 ;   //Кол-во пунктов для включения тралa
int iTrailDist    = 10 ;   //Расстояние от стопа до рынка
//--- global parameters
int iDistTrail = iTrailDist;
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
if (iDistTrail<MarketInfo( Symbol (),MODE_STOPLEVEL))
   iDistTrail = MarketInfo( Symbol (),MODE_STOPLEVEL);
   
   // дальше твой код

  }
//+------------------------------------------------------------------+
void TrailSL()
  {
   if (iTrailStart <= 0 ) return ; 
      
   double sl_lev;
         
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
     {
       if ( OrderSelect (i, SELECT_BY_POS,MODE_TRADES))
        {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
           {
             if (OrderType() == OP_BUY) 
              {
               if ((OrderStopLoss() == 0 && Bid > OrderOpenPrice() + iTrailStart * _Point )||(OrderStopLoss() != 0 && Bid > OrderStopLoss() + (iDistTrail+iTrailStep) * _Point ))
                 {
                  sl_lev = NormalizeDouble (Bid - iDistTrail * _Point , Digits );
                   if (OrderModify(OrderTicket(), OrderOpenPrice(), sl_lev, OrderTakeProfit(), 0 , clrRed ))
                     Print ( "Удачная модифиция стоплосс ордера №" ,OrderTicket());
                   else
                     Print ( "Не удалось модифицировать стоплосс ордера №" ,OrderTicket(), ". Ошибка: " , GetLastError ());
                 }
              }
             if (OrderType() == OP_SELL) 
              {
               if ((OrderStopLoss() == 0 && Ask < OrderOpenPrice() - iTrailStart * _Point )||(OrderStopLoss() != 0 && Ask < OrderStopLoss() - (iDistTrail+iTrailStep) * _Point ))
                 {
                  sl_lev = NormalizeDouble (Ask + iDistTrail * _Point , Digits );
                   if (OrderModify(OrderTicket(), OrderOpenPrice(), sl_lev, OrderTakeProfit(), 0 , clrRed ))
                     Print ( "Удачная модифиция стоплосс ордера №" ,OrderTicket());
                   else
                     Print ( "Не удалось модифицировать стоплосс ордера №" ,OrderTicket(), ". Ошибка: " , GetLastError ());
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
 

이 상수에 대해 ENUM이 있거나 직접 작성해야 한다고 말해주십시오.

끊임없는

의미

설명

DRAW_LINE

0

단순한 선

DRAW_SECTION

하나

비어 있지 않은 라인 값 사이의 세그먼트

DRAW_HISTOGRAM

2

막대 그래프

DRAW_ARROW

화살표(기호)

DRAW_ZIGZAG

4

짝수 라인과 홀수 라인(지그재그)의 비어 있지 않은 값 사이의 세그먼트, 2

DRAW_NONE

12

도면 부족

 
Tretyakov Rostyslav # :

이 상수에 대해 ENUM이 있거나 직접 작성해야 한다고 말해주십시오.

끊임없는

의미

설명

DRAW_LINE

0

단순한 선

DRAW_SECTION

하나

공백이 아닌 라인 값 사이의 세그먼트

DRAW_HISTOGRAM

2

막대 그래프

DRAW_ARROW

화살표(기호)

DRAW_ZIGZAG

4

짝수 라인과 홀수 라인(지그재그)의 비어 있지 않은 값 사이의 세그먼트, 2

DRAW_NONE

12

도면 부족

그리기 스타일

ENUM_DRAW_TYPE

mql4에 전화 그런 건 없습니다 ...
 
Alexey Viktorov # :
그리기 스타일

ENUM_DRAW_TYPE

mql4에 전화 걸기 그런 건 없어요...
고마워 내꺼 쓸게
 
Tretyakov Rostyslav # :

이 같은

감사합니다. 더 파고들어 알아보겠습니다.

 
Tretyakov Rostyslav # :

이 같은

 int       Login = 4950287 ;

datetime time  = D'2022.01.01 00:00:00' ;

string    name  = "Test" ;

datetime time1 = 0 ;

double    TP, lastlot, minlot;

int       Forder;

int       TakeProfit,TrailStart,TrailDist,TrailStep,TrailTakeProfit,Step,Slippage;

double    level_count= 0 ;

int iDistTrail = iTrailDist;

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//

//Torder-Цена открытия первого ордера

//+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

int OnInit ()

{

     if (AccountNumber() != Login)

       {

         int close = MessageBox ( "Неверный номер счёта" , "Ошибка" , MB_OK | MB_ICONSTOP );

         return ( INIT_FAILED );

       } else (AccountNumber() == Login);

             {

               int close = MessageBox ( "Проверка прошла успешно.Экcперт может приступить к работе." , "Инициализация" , MB_OK | MB_ICONEXCLAMATION );

             }

 //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//  

     if ( TimeCurrent () > time)

        {

         int close = MessageBox ( "Время работы закончилось!!!" , "Время работы" , MB_OK | MB_ICONSTOP );

         return ( INIT_FAILED );

        } else ( TimeCurrent () < time);

             {

               int close = MessageBox ( "Проверка времени работы прошла успешно.Эксперт может приступить к работе!" , "Время работы" , MB_OK | MB_ICONEXCLAMATION );

             }

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//

      TakeProfit         =iTakeProfit;

      TrailStart         =iTrailStart;

      TrailDist          =iTrailDist;

      TrailStep          =iTrailStep;

      TrailTakeProfit    =iTrailTakeProfit;

      Step               =iStep;

      Slippage           =iSlippage;

      

 //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//   

     if ( Digits == 3 || Digits == 5 )

       {

        TakeProfit      *= 10 ;

        TrailStart      *= 10 ;

        TrailDist       *= 10 ;

        TrailStep       *= 10 ;

        TrailTakeProfit *= 10 ;

        Step            *= 10 ;

        Slippage        *= 10 ;

       }

       return ( INIT_SUCCEEDED );

    }

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//

//+------------------------------------------------------------------+

//| Expert deinitialization function                                 |

//+------------------------------------------------------------------+

void OnDeinit ( const int reason)

  {

//---

   

  }

//+------------------------------------------------------------------+

//| Expert tick function                                             |

//+------------------------------------------------------------------+



void OnTick ()

  {

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//

 /*  Comment( 

  "\n",                      name,

  "\n", 

  " ",                       Symbol(),  

  "\n",

  "Тайм Фрейм ",             Period(),

  "\n",                      AccountCompany(),

  "\n",

  "\n ",                     AccountServer(),

  "\n", 

  "Lots\n",                  B_S_Lot(),

  "\n",

  "Price ",                  Bid,

  "\n", 

  "Дата ",                   TimeToString( TimeCurrent(), TIME_DATE ),

  "\n",

  "Server Time ",            TimeToString( TimeCurrent(), TIME_SECONDS ),

  "\n", 

  "Profit ",                 Profit(),

  "\n",

  "AvTP ",                   CalcTP (),

  "\n", 

  "Количество ордеров ",     CountTrades(),

  "\n",

  "\n ",                     GetVolumeLotLastOrder(),

  "\n",

  "\n", "Процент просадки ", NormalizeDouble(  (AccountInfoDouble(ACCOUNT_BALANCE)-AccountInfoDouble(ACCOUNT_MARGIN_FREE))/AccountInfoDouble(ACCOUNT_BALANCE)*100,2)

  );*/ 

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//

   double body = Close[ 1 ] - Open[ 1 ];

   if (CountTrades() == 0 && body > 0 ) BuyOpen();     // Если нет открытых и сигнал бай

   if (CountTrades() == 0 && body < 0 ) SellOpen();     // Если нет открытых и сигнал селл

   if (CountTrades( 0 ) > 0 && body > 0 ) BuyOpen();     // Если есть открытые бай и сигнал бай

   if (CountTrades( 1 ) > 0 && body < 0 ) SellOpen();     // Если есть открытые селл и сигнал селл

   /* if (iTrailStart<MarketInfo(Symbol(),MODE_STOPLEVEL))

   iTrailStart= MarketInfo(Symbol(), MODE_STOPLEVEL * Point);

   iTrailSL();

  */

   if (iDistTrail<MarketInfo( Symbol (),MODE_STOPLEVEL))

   iDistTrail = MarketInfo( Symbol (),MODE_STOPLEVEL);

  }

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//

void BuyOpen() //Открытие позиции Buy

  {

   Forder = ( OrderSend ( _Symbol ,OP_BUY,Lot,Ask,iSlippage, 0 , 0 , "Коммент" ,Magic, 0 ,Blue));

   if (Forder > 0 )

     {

       Print ( "Открыта Позиция BUY" );

       if ( OrderSelect (Forder, SELECT_BY_TICKET))

        {

         TP = NormalizeDouble ((Ask+iTakeProfit* _Point ), _Digits );

         if (OrderModify(OrderTicket(),OrderOpenPrice(), 0 ,TP, 0 ))

             Print ( "Ордер Модифицирован BUY " ); 

         else 

             Print ( "Ошибка Модификации Ордера BUY = " , GetLastError ());

        }

     }

   else Print ( "Ошибка Открытия Позиции BUY" );

  }

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//

void SellOpen() //Открытие позиции Sell  

  {

   Forder = ( OrderSend ( _Symbol ,OP_SELL,Lot,Bid,iSlippage, 0 , 0 , "Коммент Sell" ,Magic, 0 ,Red));

   if (Forder > 0 )

     {

       Print ( "Открыта Позиция SELL" );

       if ( OrderSelect (Forder, SELECT_BY_TICKET))

        {

         TP = NormalizeDouble ((Bid-iTakeProfit* _Point ), _Digits );

         if (OrderModify(OrderTicket(),OrderOpenPrice(), 0 ,TP, 0 ))

             Print ( "Ордер Модифицирован SELL " ); 

         else 

             Print ( "Ошибка Модификации Ордера SELL = " , GetLastError ());

        }

     }

   else Print ( "Ошибка Открытия Позиции SELL" );

  }

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//

//+------------------------------------------------------------------+

//| Tester function                                                  |

//+------------------------------------------------------------------+

double OnTester ()

  {

//---

   double ret= 0.0 ;

//---



//---

   return (ret);

  }

//+------------------------------------------------------------------+

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//

//+------------------------------------------------------------------+

//|                       Подсчёт эквити                             |

//+------------------------------------------------------------------+

double Profit(){ double count= 0 ;

     for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--){

         if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)){

           if (OrderSymbol() == Symbol () && OrderMagicNumber()==Magic)

              count+=OrderProfit();  count+=OrderSwap();               

           }   

        }   

     return ( NormalizeDouble (count, 2 ));

}

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//

void TrailSL()

  {

   if (iTrailStart <= 0 ) return ; 

      

   double sl_lev;

         

   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)

     {

       if ( OrderSelect (i, SELECT_BY_POS,MODE_TRADES))

        {

         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)

           {

             if (OrderType() == OP_BUY) 

              {

               if ((OrderStopLoss() == 0 && Bid > OrderOpenPrice() + iTrailStart * _Point )||(OrderStopLoss() != 0 && Bid > OrderStopLoss() + (iDistTrail+iTrailStep) * _Point ))

                 {

                  sl_lev = NormalizeDouble (Bid - iDistTrail * _Point , Digits );

                   if (OrderModify(OrderTicket(), OrderOpenPrice(), sl_lev, OrderTakeProfit(), 0 , clrRed ))

                     Print ( "Удачная модифиция стоплосс ордера №" ,OrderTicket());

                   else

                     Print ( "Не удалось модифицировать стоплосс ордера №" ,OrderTicket(), ". Ошибка: " , GetLastError ());

                 }

              }

             if (OrderType() == OP_SELL) 

              {

               if ((OrderStopLoss() == 0 && Ask < OrderOpenPrice() - iTrailStart * _Point )||(OrderStopLoss() != 0 && Ask < OrderStopLoss() - (iDistTrail+iTrailStep) * _Point ))

                 {

                  sl_lev = NormalizeDouble (Ask + iDistTrail * _Point , Digits );

                   if (OrderModify(OrderTicket(), OrderOpenPrice(), sl_lev, OrderTakeProfit(), 0 , clrRed ))

                     Print ( "Удачная модифиция стоплосс ордера №" ,OrderTicket());

                   else

                     Print ( "Не удалось модифицировать стоплосс ордера №" ,OrderTicket(), ". Ошибка: " , GetLastError ());

                 }

              }

           }

        }

     }

  }

//+------------------------------------------------------------------+

다음은 코드입니다. 내가 올바르게 지정하지 않은 것일 수도 있지만 효과는 없습니다.

 
Alexander Avksentyev # :

다음은 코드입니다. 내가 올바르게 지정하지 않은 것일 수도 있지만 효과는 없습니다.

잡지에는 무엇이 있습니까?

전체 코드를 게시하고 파일로 첨부합니다.