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

 
var58 :
안녕하세요. MQL4 어드바이저 코드에서 주문을 여는 규칙을 작성하는 방법을 알려주십시오. 시장에 특정 마법이 있는 주문이 있어야 합니다. 그러한 주문이 없으면 어드바이저는 메인에 따라 아무 것도 열지 않습니다. 연산. 이 마법은 변수에 등록됩니다.

다음과 같은 것이 가능합니다.

void OnTick ()
{
   Comment ( IsCount( ORDER_TYPE_BUY_STOP , 5 ) ); // type - тип, mg - magic
}

//------- Вернёт количество
int IsCount( int type, int mg) {
int p= 0 ;
   for ( int i= 0 ; i< OrdersTotal (); i++) {
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
     if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==mg) {
     if ( OrderType ()==type) {
      p++;
  }}}}
   return (p);
}
 

배열을 사용자로 채우는 방법은 무엇입니까?

 
-Aleks- :

배열을 사용자로 채우는 방법은 무엇입니까?

사용자 외에 누가 채울 수 있습니까?
 

안녕하세요, 차트 에 주문 내역 을 그리는 표시기가 있으며 코드는 다음과 같습니다.

//+------------------------------------------------------------------+
//|                                                      history.mq4 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict
#property indicator_chart_window

extern int         MagicNumber                = 1110 ;
extern datetime    HistoryOrdersFromDateTime  = 0 ;
extern color       SellColor                  = clrRed ;
extern color       BuyColor                   = clrBlue ;
extern color       ProfitColor                = clrWhite ;
extern bool        DeleteHistoryOrders        = false ;


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
  
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+

void start()
{
   for ( int i= OrdersHistoryTotal ()- 1 ; i>= 0 ; i--)
   {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ) && OrderMagicNumber ()==MagicNumber && OrderSymbol ()== Symbol () && OrderType ()<= 1 )
      {
         if (HistoryOrdersFromDateTime< OrderCloseTime ())
         {
             if (( TimeCurrent ()- OrderCloseTime ())> 60 )
               HistoryOrders();
         }
      }
   }
}

void HistoryOrders()
{
   int CountOrders= 0 ;
   double b= OrderOpenPrice (), d= OrderClosePrice (), lots= OrderLots (), Profit= 0 ;
   datetime a= OrderOpenTime (), c= OrderCloseTime (), close_time;
   string Ticket=( string ) OrderTicket (), type= "Sell" , symbol= OrderSymbol (), comment= OrderComment (), Background;
   color col=SellColor;
   if ( OrderType ()== 0 ) {col=BuyColor; type= "Buy" ;}

   //Расчет профита
   for ( int i= OrdersHistoryTotal ()- 1 ; i>= 0 ; i--)
   {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ) && OrderMagicNumber ()==MagicNumber && OrderSymbol ()== Symbol () && OrderType ()<= 1 )
      {
         close_time= OrderCloseTime ();
         if (c<=close_time+ 60 && c>=close_time- 60 )
         {
            Profit+= OrderProfit ()+ OrderCommission ()+ OrderSwap ();
            Ticket=( string ) OrderTicket ();
         }  
      }      
   }
  
   //Размер фона  
   for ( int i= 2 ; i< StringLen ( DoubleToString (Profit, 2 )); i++)
       StringAdd (Background, "g" );

   if (DeleteHistoryOrders== false )
   {
       //Начальная точка
       ObjectCreate ( "#" +Ticket+ " " +type+ " " + DoubleToString (lots, 2 )+ " " +symbol+ " at " + DoubleToString (b, Digits )+ "\n" +comment, OBJ_ARROW , 0 ,a,b);
       ObjectSet ( "#" +Ticket+ " " +type+ " " + DoubleToString (lots, 2 )+ " " +symbol+ " at " + DoubleToString (b, Digits )+ "\n" +comment, OBJPROP_COLOR ,col);
       ObjectSet ( "#" +Ticket+ " " +type+ " " + DoubleToString (lots, 2 )+ " " +symbol+ " at " + DoubleToString (b, Digits )+ "\n" +comment, OBJPROP_ARROWCODE , 1 );
      
       //Линия  
       ObjectCreate ( "#" +Ticket+ " " + DoubleToString (b, Digits )+ " -> " + DoubleToString (d, Digits ), OBJ_TREND , 0 ,a,b,c,d);
       ObjectSet ( "#" +Ticket+ " " + DoubleToString (b, Digits )+ " -> " + DoubleToString (d, Digits ), OBJPROP_COLOR ,col);
       ObjectSet ( "#" +Ticket+ " " + DoubleToString (b, Digits )+ " -> " + DoubleToString (d, Digits ), OBJPROP_WIDTH , 1 );
       ObjectSet ( "#" +Ticket+ " " + DoubleToString (b, Digits )+ " -> " + DoubleToString (d, Digits ), OBJPROP_STYLE , STYLE_DOT );
       ObjectSet ( "#" +Ticket+ " " + DoubleToString (b, Digits )+ " -> " + DoubleToString (d, Digits ), OBJPROP_RAY , 0 );
  
       //Конечная точка
       ObjectCreate ( "#" +Ticket+ " " +type+ " " + DoubleToString (lots, 2 )+ " " +symbol+ " at " + DoubleToString (b, Digits )+ " close at " + DoubleToString (d, Digits ), OBJ_ARROW , 0 ,c,d);
       ObjectSet ( "#" +Ticket+ " " +type+ " " + DoubleToString (lots, 2 )+ " " +symbol+ " at " + DoubleToString (b, Digits )+ " close at " + DoubleToString (d, Digits ), OBJPROP_COLOR ,col);
       ObjectSet ( "#" +Ticket+ " " +type+ " " + DoubleToString (lots, 2 )+ " " +symbol+ " at " + DoubleToString (b, Digits )+ " close at " + DoubleToString (d, Digits ), OBJPROP_ARROWCODE , 3 );

       //Фон профита
       ObjectCreate ( "#" +Ticket+ " Background" , OBJ_TEXT , 0 ,c,d);
       ObjectSet ( "#" +Ticket+ " Background" , OBJPROP_ANCHOR , ANCHOR_LOWER );
       ObjectSetText ( "#" +Ticket+ " Background" ,Background, 10 , "Webdings" ,col);
       ObjectSet ( "#" +Ticket+ " Background" , OBJPROP_PRICE1 ,d);
       ObjectSet ( "#" +Ticket+ " Background" , OBJPROP_TIME1 ,c+ Period ());

       //Профит
       ObjectCreate ( "#" +Ticket+ " Profit: " + DoubleToString (Profit, 2 ), OBJ_TEXT , 0 ,c,d);
       ObjectSet ( "#" +Ticket+ " Profit: " + DoubleToString (Profit, 2 ), OBJPROP_ANCHOR , ANCHOR_LOWER );
       ObjectSetText ( "#" +Ticket+ " Profit: " + DoubleToString (Profit, 2 ), DoubleToString (Profit, 2 ), 10 , "Arial" ,ProfitColor);
       ObjectSet ( "#" +Ticket+ " Profit: " + DoubleToString (Profit, 2 ), OBJPROP_PRICE1 ,d);
       ObjectSet ( "#" +Ticket+ " Profit: " + DoubleToString (Profit, 2 ), OBJPROP_TIME1 ,c+ Period ());
   } else ObjectsDeleteAll ( 0 , "#" +Ticket+ " " );  
}

void OnDeinit ( const int reason)
{
   for ( int i= 0 ; i< OrdersHistoryTotal (); i++)
   {
      DeleteHistoryOrders= true ;
       if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ) && OrderMagicNumber ()==MagicNumber && OrderSymbol ()== Symbol ())
         HistoryOrders();
   }
}

표시기는 단일 거래를 올바르게 그립니다(선>배경>이익), 그러나 닫힌 주문 그리드의 표시에는 작은 "캔트"(스크린샷 첨부)가 있고, 선은 배경과 이익(선(1)>배경에 겹쳐짐)이 있습니다. >이익>선(2) >선(3)>선(4) ... ).

(line(1)>line(2)>line(3)>line(4) ... >background>profit)과 같아야 합니다. 탬버린과 함께하는 다양한 춤이 성공으로 이어지지 않았으므로 문제를 해결하는 데 도움이 됩니다.

파일:
 
Vitaly Muzichenko :
사용자 외에 누가 채울 수 있습니까?

설정을 통해 채우는 방법에 대해 이야기하고 있습니다. 문자열을 통해 말한 다음 그 값을 배열에 넣습니다 ...

 
-Aleks- :

설정을 통해 채우는 방법에 대해 이야기하고 있습니다. 문자열을 통해 말한 다음 그 값을 배열에 넣습니다 ...

여기 처럼
StringToCharArray - Преобразование данных - Справочник MQL4
StringToCharArray - Преобразование данных - Справочник MQL4
  • docs.mql4.com
StringToCharArray - Преобразование данных - Справочник MQL4
 
Vitaly Muzichenko :

다음과 같은 것이 가능합니다.

void OnTick ()
{
   Comment ( IsCount( ORDER_TYPE_BUY_STOP , 5 ) ); // type - тип, mg - magic
}

//------- Вернёт количество
int IsCount( int type, int mg) {
int p= 0 ;
   for ( int i= 0 ; i< OrdersTotal (); i++) {
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
     if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==mg) {
     if ( OrderType ()==type) {
      p++;
  }}}}
   return (p);
}
ORDER_TYPE_BUY_STOP 은 MQL4 도움말이 아니라 MQL4 편집기에서 강조 표시됩니다. 질문: MQL4에서 작동합니까? OP_BUYSTOP 유형에 해당합니까? 확인할 시간이 없습니다.
 
Vitaly Muzichenko :

다음과 같은 것이 가능합니다.

void OnTick ()
{
   Comment ( IsCount( ORDER_TYPE_BUY_STOP , 5 ) ); // type - тип, mg - magic
}

//------- Вернёт количество
int IsCount( int type, int mg) {
int p= 0 ;
   for ( int i= 0 ; i< OrdersTotal (); i++) {
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
     if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==mg) {
     if ( OrderType ()==type) {
      p++;
  }}}}
   return (p);
}

Vitaly Muzichenko :

Примерно так можно:

void OnTick ()
{
   Comment ( IsCount( ORDER_TYPE_BUY_STOP , 5 ) ); // type - тип, mg - magic
}

//------- Вернёт количество
int IsCount( int type, int mg) {
int p= 0 ;
   for ( int i= 0 ; i< OrdersTotal (); i++) {
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
     if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==mg) {
     if ( OrderType ()==type) {
      p++;
  }}}}
   return (p);
}

Спасибо большое, попробую. 

 
Vitaly Muzichenko :
여기 처럼

고맙습니다!

 
Artyom Trishkin :
ORDER_TYPE_BUY_STOP 은 MQL4 도움말이 아니라 MQL4 편집기에서 강조 표시됩니다. 질문: MQL4에서 작동합니까? OP_BUYSTOP 유형에 해당합니까? 확인할 시간이 없습니다.

예, 100% 작동합니다. 이제 저는 그냥 그렇게 씁니다. 이제 많은 것이 5개에서 4개로 마이그레이션되었습니다.

이것도 작동하지만 컴파일러는 맹세했지만 이것은 추세선입니다.

     ObjectSetInteger (chart_ID,nm, OBJPROP_TIME ,t1);
     ObjectSetDouble (chart_ID,nm, OBJPROP_PRICE ,p1);
     ObjectSetInteger (chart_ID,nm, OBJPROP_TIME , 1 ,t2);
     ObjectSetDouble (chart_ID,nm, OBJPROP_PRICE , 1 ,p2);