MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 121

 
var58 :
Merhaba. Lütfen bana MQL4 danışman kodunda bir emir açmak için böyle bir kuralın nasıl yazılacağını söyleyin, piyasada belirli bir sihirle bir emir olmalı, böyle bir emir yoksa, danışman ana fikrine göre hiçbir şey açmaz. algoritma. bu sihir değişkenlerde kayıtlıdır.

Böyle bir şey mümkündür:

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- :

Bir diziyi bir kullanıcıyla doldurmak nasıl mümkün olur?

Ve kullanıcı dışında kim doldurabilir?
 

Selamlar, siparişlerin geçmişini grafik üzerinde çizen bir gösterge var, kod:

//+------------------------------------------------------------------+
//|                                                      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();
   }
}

Gösterge tek bir anlaşmayı doğru bir şekilde çizer (çizgi>arka plan>kar), ancak kapalı sipariş ızgaralarının gösteriminde küçük bir "cant" (ekran görüntüsü ekli) vardır, çizgiler arka planda ve kârda üst üste bindirilir (çizgi(1)>arka plan) >kâr>satır(2) >satır(3)>satır(4) . . . ).

Şu şekilde olmalıdır: (line(1)>line(2)>line(3)>line(4) . . . >background>kâr). Tefli çeşitli danslar başarıya yol açmadı, düzeltmeye yardımcı oldu.

Dosyalar:
 
Vitaly Muzichenko :
Ve kullanıcı dışında kim doldurabilir?

Ayarlardan nasıl doldurulacağından bahsediyorum. Diyelim ki bir dize aracılığıyla ve sonra değerini bir diziye koyalım ...

 
-Aleks- :

Ayarlardan nasıl doldurulacağından bahsediyorum. Diyelim ki bir dize aracılığıyla ve sonra değerini bir diziye koyalım ...

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

Böyle bir şey mümkündür:

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 yardımında değil, MQL4 düzenleyicide vurgulanmıştır. Soru: MQL4'te çalışıyor mu OP_BUYSTOP türüne karşılık geliyor mu? Sadece kontrol etmek için zamanın yok.
 
Vitaly Muzichenko :

Böyle bir şey mümkündür:

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 :
buradaki gibi

Teşekkür ederim!

 
Artyom Trishkin :
ORDER_TYPE_BUY_STOP , MQL4 yardımında değil, MQL4 düzenleyicide vurgulanmıştır. Soru: MQL4'te çalışıyor mu OP_BUYSTOP türüne karşılık geliyor mu? Sadece kontrol etmek için zamanın yok.

Evet %100 çalışıyor, şimdi sadece böyle yazıyorum. Şimdi çok şey beşten dörde göç etti.

Bu bile işe yarıyor, derleyici küfür etse de, bu bir trend çizgisi.

     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);