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

 
MakarFX # :

Makar 감사합니다. 이제 고문에게 나사로 연결하고 살펴보겠습니다.

 
MakarFX # :

Makar 감사합니다 모든 것이 내가 원하는 대로 작동합니다. 감사해요!!!

 
MakarFX # :

하루 안에 불필요한 줄을 스스로 삭제하고 싶습니다.

미리 감사드립니다!!!

 
EVGENII SHELIPOV # :

하루 안에 불필요한 줄을 스스로 삭제하고 싶습니다.

미리 감사드립니다!!!

 int OnInit ()
  {
   if ((UseHour== 1 &&Hour()>=StartTime&&Hour()<=StopTime)||UseHour== 0 )
     {
       ObjectCreate ( 0 , "Начало торговли" + TimeToString (Time[ 0 ], TIME_DATE ), OBJ_VLINE , 0 ,Time[ 0 ]+(StartTime* 3600 ), 0 );
       ObjectSetInteger ( 0 , "Начало торговли" + TimeToString (Time[ 0 ], TIME_DATE ), OBJPROP_COLOR , clrBlue );
       ObjectCreate ( 0 , "Окончание торговли" + TimeToString (Time[ 0 ], TIME_DATE ), OBJ_VLINE , 0 ,Time[ 0 ]+(StopTime* 3600 ), 0 );
       ObjectSetInteger ( 0 , "Окончание торговли" + TimeToString (Time[ 0 ], TIME_DATE ), OBJPROP_COLOR , clrBlue );
     }
   
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
void OnTick ()
  {
   if ((UseHour== 1 &&Hour()>=StartTime&&Hour()<=StopTime)||UseHour== 0 )
     {
       if ( ObjectFind ( 0 , "Начало торговли" + TimeToString (Time[ 1 ], TIME_DATE ))== 0 )
        {
         ObjectMove ( 0 , "Начало торговли" + TimeToString (Time[ 0 ], TIME_DATE ), 0 ,Time[ 0 ]+(StartTime* 3600 ), 0 )
         ObjectMove ( 0 , "Окончание торговли" + TimeToString (Time[ 0 ], TIME_DATE ), 0 ,Time[ 0 ]+(StopTime* 3600 ), 0 )
        }
       if (CountTrade( 0 )== 0 && CountTrade( 1 )== 0 && TradeSignal()== 0 )
         SendFirsOrder( 0 );
       if (CountTrade( 1 )== 0 && CountTrade( 0 )== 0 && TradeSignal()== 1 )
         SendFirsOrder( 1 );
     }

   //-----
  }
 
Nerd Trader # :

도움말에서:
"반복되지 않는 시퀀스를 얻으려면 GetTickCount( ) 값이 운영 체제 시작 이후 증가하고 49일 동안 반복되지 않으므로 MathSrand(GetTickCount()) 호출을 사용하십시오."

계산기에서 계산 - rand() 함수에 대해 몇 번 시도한 후 첫 번째 반복 값(이전에 생성된 값 중 하나)을 얻습니다.

 

내 경험에서 - 키릴 문자를 쓰지 마십시오

ECN MT4 열기

/+----------------------------------------------------------------------------+
//|    Функция открытия ордера  (c) BeerGod 2015                               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" - текущий символ)                   |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - MagicNumber                                                        |
//+----------------------------------------------------------------------------+
//  OpenPosition(string symbol,int operation,double volume,int slippage,double stoploss,double takeprofit,string comment,int magic,color);
int OpenPosition( string sy, int op, double ll, int Slippage, int sl, int tp, string comment, int mn, color Color)
  {
   if (op == 0 )   // открытие BUY
     {
       // проверяем доступность свободных средств
       if ((AccountFreeMarginCheck(sy,OP_BUY,ll)<= 0 ) || ( GetLastError ()== 134 ))
        {
         Print (sy, " " ,ll, " It is impossible to open the order Buy, not enough money." );
         return ( 0 );
        }
      RefreshRates();

       // открываем ордер
       int ticketbuy = OrderSend (sy,OP_BUY,ll,MarketInfo(sy,MODE_ASK),Slippage, 0 , 0 ,comment,mn, 0 ,Color);
       if (ticketbuy< 0 )
         Print (sy, " OpenPosition. OrderSend Buy fail #" , GetLastError ());
       else
         Print (sy, " OpenPosition. OrderSend Buy successfully" );

       //      Sleep (Pause);

       // модифицируем ордер (выставляем тейпрофит и стоплосс)
       if (sl != 0 || tp != 0 )
        {
         //--- вычисленные значения цен SL и TP должны быть нормализованы
         double BSLoss = NormalizeDouble (MarketInfo(sy,MODE_ASK)-sl*MarketInfo(sy,MODE_POINT),( int )MarketInfo(sy,MODE_DIGITS));
         double BTProfit = NormalizeDouble (MarketInfo(sy,MODE_ASK)+tp*MarketInfo(sy,MODE_POINT),( int )MarketInfo(sy,MODE_DIGITS));
         //--- если входящие значения ноль то заменяем цену модификации на ноль
         if (sl == 0 )
            BSLoss = 0 ;
         if (tp == 0 )
            BTProfit = 0 ;

         bool resbuy = OrderModify(ticketbuy,OrderOpenPrice(),BSLoss,BTProfit, 0 , clrNONE );
         if (!resbuy)
             Print (sy, " OpenPosition. OrderModify Buy fail #" , GetLastError ());
         else
             Print (sy, " OpenPosition. OrderModify Buy successfully" );
        }
     }

   if (op == 1 )   // открытие Sell
     {
       // проверяем доступность свободных средств
       if ((AccountFreeMarginCheck(sy,OP_SELL,ll)<= 0 ) || ( GetLastError ()== 134 ))
        {
         Print (sy, " " ,ll, " It is impossible to open the order Sell, not enough money." );
         return ( 0 );
        }
      RefreshRates();

       // открываем ордер
       int ticketsell = OrderSend (sy,OP_SELL,ll,MarketInfo(sy,MODE_BID),Slippage, 0 , 0 ,comment,mn, 0 ,Color);
       if (ticketsell< 0 )
         Print (sy, " OpenPosition. OrderSend Sell fail #" , GetLastError ());
       else
         Print (sy, " OpenPosition. OrderSend Sell successfully" );

       //      Sleep (Pause);

       // модифицируем ордер (выставляем тейпрофит и стоплосс)
       if (sl != 0 || tp != 0 )
        {
         //--- вычисленные значения цен SL и TP должны быть нормализованы
         double SSLoss = NormalizeDouble (MarketInfo(sy,MODE_BID)+sl*MarketInfo(sy,MODE_POINT),( int )MarketInfo(sy,MODE_DIGITS));
         double STProfit = NormalizeDouble (MarketInfo(sy,MODE_BID)-tp*MarketInfo(sy,MODE_POINT),( int )MarketInfo(sy,MODE_DIGITS));
         //--- если входящие значения ноль то заменяем цену модификации на ноль
         if (sl == 0 )
            SSLoss = 0 ;
         if (tp == 0 )
            STProfit = 0 ;

         bool ressell = OrderModify(ticketsell,OrderOpenPrice(),SSLoss,STProfit, 0 , clrNONE );
         if (!ressell)
             Print (sy, " OpenPosition. OrderModify Sell fail #" , GetLastError ());
         else
             Print (sy, " OpenPosition. OrderModify Sell successfully" );
        }
     }
   return ( 0 );
  }
//--- End ---
 

모두에게 좋은 하루!

MQL4의 동적 2차원 배열에 대한 기본 정보가 있는 곳을 알려주세요. 우선, 그것을 만드는 방법? 사용 방법? 어떤 기능이 적용됩니까?
고맙습니다.

 
ANDREY # :

모두에게 좋은 하루!

MQL4의 동적 2차원 배열에 대한 기본 정보가 있는 곳을 알려주세요. 우선, 그것을 만드는 방법? 사용 방법? 어떤 기능이 적용됩니까?
고맙습니다.

어레이 문서

그리고 역학은 첫 번째 차원에만 있습니다. 나머지 차원은 정적입니다.
Объект динамического массива - Типы данных - Основы языка - Справочник MQL4
Объект динамического массива - Типы данных - Основы языка - Справочник MQL4
  • docs.mql4.com
Объект динамического массива - Типы данных - Основы языка - Справочник MQL4
 
Valeriy Yastremskiy # :

어레이 문서

그리고 역학은 첫 번째 차원에만 있습니다. 나머지 차원은 정적입니다.

CArray 및 이와 유사한 기타 - 모든 차원의 동적 배열을 만들고 모든 차원에서 크기를 조정할 수 있습니다.

Документация по MQL5: Стандартная библиотека / Коллекции данных
Документация по MQL5: Стандартная библиотека / Коллекции данных
  • www.mql5.com
Коллекции данных - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin # :

CArray 및 이와 유사한 기타 - 모든 차원의 동적 배열을 만들고 모든 차원에서 크기를 조정할 수 있습니다.

도와 주셔서 감사합니다. 그러나 MQL5와 관련된 동적 어레이에 대한 정보에 대한 링크를 제공합니다. 그리고 저는 여전히 MQL4를 배우고 있습니다. 또는 동적 배열과 관련하여 MQL5의 코드도 해당 언어에 적합합니다.   MQL4?
고맙습니다.