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

 
Artyom Trishkin :
Geçenlerde burada bir çapraz platform gösterge şablonu yayınladım. Şuna bak.
GöstergeTamponları()

bir bloga ihtiyacınız var ve orada aynı soruların cevaplarını yayınlayın .... Böyle bir sabrım olurdu!

burada https://www.mql5.com/en/forum/160683/page670#comment_9054670

Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
  • 2018.10.18
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
Igor Makanu :

bir bloga ihtiyacınız var ve orada aynı soruların cevaplarını yayınlayın .... Böyle bir sabrım olurdu!

Gerekli olabilir. Evet, zaman yok. Ve sorular her zaman aynı olacak +/-

 
Sorun çözüldü - yardımcı değişkenlere arabelleklerin son seri numaraları atanmışsa, ancak aynı zamanda ekran ayarları belirtilmemişse. Bundan önce, gereksiz arabellekler listenin ortasındaydı.
 

Yardım.

O gün için kapalı pozisyonların yerine bekleyen emirleri koymak istiyorum.

İşlev, son kapatılan pozisyonun fiyatından bir emir verir.

Gün içinde kapatılan tüm pozisyonların fiyatlarını ertelemek için ne yapmalıyım?

oid PriceTimePos( string sy= "" , int op=- 1 , int mn=- 1 ) 
  {
   datetime t;
   bool daa;
   int d,k_= OrdersTotal (),typ_;
   double    r= 0 ;
   int       i,k= OrdersHistoryTotal ();

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) 
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) 
        {
         if ( OrderSymbol ()== Symbol ()) 
           {
             if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) 
              {
               if (op< 0 || OrderType ()==op) 
                 {
                   if (mn< 0 || OrderMagicNumber ()==mn) 
                    {
                     if ( OrderCloseTime ()>= TimeCurrent ()- 1440 * 60 )
                       {
                        t= OrderCloseTime ();
                        r= OrderOpenPrice ();
                        sl= OrderStopLoss ();
                        tp= OrderTakeProfit ();
                        lot= OrderLots ();
                        typ_= OrderType ();
                         //Print("OpenPrice",r);
                       }
                    }
                 }
              }
           }
        }
     }
// ЕСТЬ ОРДЕР ПО ЦЕНЕ ЗАКРЫТОЙ ПОЗИЦИИ?
   daa= false ;
   for (i= 0 ; i<k; i++) 
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) 
        {
         if (( OrderSymbol ()==sy || sy== "" ) && (op< 0 || OrderType ()==op)) 
           {
             if ( OrderType ()> 1 && OrderType ()< 6 ) 
              {
               d= MarketInfo ( OrderSymbol (), MODE_DIGITS );
               r= NormalizeDouble (r, d);
               if (r== NormalizeDouble ( OrderOpenPrice (),d)) {daa= true ;}
              }
           }
        }
     }
   if (daa== false ) //ЕСЛИ НЕТ ОРДЕРА ПО ЦЕНЕ, СТАВЛЮ
     {
       double opprord= 0 ;
       for (i= 0 ; i<k_; i++) 
        {
         if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) 
           {
             if (( OrderSymbol ()==sy || sy== "" ) && (op< 0 || OrderType ()==op)) 
              {
               if ( OrderType ()> 1 && OrderType ()< 6 ) 
                 {
                  d= MarketInfo ( OrderSymbol (), MODE_DIGITS );
                  opprord= OrderOpenPrice ();
                   // r=NormalizeDouble(r, d);
                   if (r!= NormalizeDouble (opprord,d))
                    {
                     if (r> Ask )
                       {
                         if (typ_== OP_BUY )
                          {
                           Print ( "OP_BUYSTOP" ,r);
                           SetOrder( Symbol (), OP_BUYSTOP ,lot,r,sl,tp,_MagicNumber, 0 , "bs" );
                          }
                         if (typ_== OP_SELL )
                          {
                           Print ( "OP_SELLLIMIT" ,r);
                           SetOrder( Symbol (), OP_SELLLIMIT ,lot,r,sl,tp,_MagicNumber, 0 , "sl" );
                          }
                       }

                     //
                     if ( Bid >r)
                       {
                         if (typ_== OP_BUY )
                          {
                           Print ( "OP_BUYLIMIT" ,r);
                           SetOrder( Symbol (), OP_BUYLIMIT ,lot,r,sl,tp,_MagicNumber, 0 , "bl" );
                          }
                         if (typ_== OP_SELL )
                          {
                           Print ( "OP_SELLSTOP" ,r);
                           SetOrder( Symbol (), OP_SELLSTOP ,lot,r,sl,tp,_MagicNumber, 0 , "bs" );
                          }
                       }
                    }
                 }
              }
           }
        }
     }
//return(r);
  }
 
PolarSeaman :

Yardım.

O gün için kapalı pozisyonların yerine bekleyen emirleri koymak istiyorum.

İşlev, son kapatılan pozisyonun fiyatından bir emir verir.

Gün içinde kapatılan tüm pozisyonların fiyatlarını ertelemek için ne yapmalıyım?

  1. Kapanan pozisyonlar listesinde dolaşın, kapanış saati ihtiyacınız olan günün başlangıç saatinden daha büyük olanları seçin (ve örneğin dünden önceki günse, onları takip eden günün başlangıç saatinden daha az)
  2. Bulunan tüm pozisyonların tüm kapanış fiyatlarını (açılışlar - hangi fiyatlara bahse girmek istediğinizi bilmiyorum) basit bir dizi veya yapılar dizisine koyun
  3. Oluşturulan dizide dolaşın ve dizideki fiyatlarla bekleyen siparişleri verin (aynı fiyata birden fazla sipariş vermemek için bu fiyatta zaten bir sipariş olup olmadığını kontrol edin)
  4. Ayrıca diziden önceden verilmiş siparişlerin fiyatlarını da kaldırabilirsiniz, ancak bu biraz daha karmaşık...
 

S. Kovalev'in kitabına göre MQL4 çalışmaya başladım, kodda tutarsızlıklar var. Kitap, eski MT4 yapıları için yazılmıştır.


Hata olmaması için bu kodu nasıl işleyeceğimi söyle.

 #property strict

int Count= 0 ;
int init()      
{
   Alert ( "Сработала ф-ия init() при запуске" );   // Сообщение
   return ;                                                                     // Выход из init()
   }   
//--------------------------------------------------------------------
int start()                                                                           // Спец. ф-ия start()
   {
   double Price = Bid ;                                                       // Локальная перемен.
   Count++;                                                                       // Счётчик тиков
   Alert ( "Новый тик " ,Count, " Цена = " ,Price);       // Сообщение
   return ;                                                                         // Выход из start()
   }
int deinit()                                                                               // Спец. ф-ия deinit()
   {
   Alert ( "Сработала ф-ия deinit() при выгрузке" );         // Сообщение
   return ;                                                                                 // Выход из deinit()
   }

hata

'dönüş' - işlev bir değer döndürmelidir

1. Bunu yapmak doğru mu?

 #property strict

int Count= 0 ;
int init()      
{
   Alert ( "Сработала ф-ия init() при запуске" );   // Сообщение
   return ( 0 );                                                                     // Выход из init()
   }   
//--------------------------------------------------------------------
int start()                                                                           // Спец. ф-ия start()
   {
   double Price = Bid ;                                                       // Локальная перемен.
   Count++;                                                                       // Счётчик тиков
   Alert ( "Новый тик " ,Count, " Цена = " ,Price);       // Сообщение
   return ( 0 );                                                                         // Выход из start()
   }
int deinit()                                                                               // Спец. ф-ия deinit()
   {
   Alert ( "Сработала ф-ия deinit() при выгрузке" );         // Сообщение
   return ( 0 );                                                                                 // Выход из deinit()
   }


2. Soru şu ki, ders kitabında sunulan bilgileri kullanarak (bilgi çağı faktörünü kastediyorum) yeni yapılar için kod yazmak ne kadar sorunlu?



Dosyalar:
 
Sergey Branin :

S. Kovalev'in kitabına göre MQL4 çalışmaya başladım, kodda tutarsızlıklar var. Kitap eski MT4 yapıları için yazılmıştır.


Hata olmaması için bu kodu nasıl işleyeceğimi söyle.

hata

'dönüş' - işlev bir değer döndürmelidir

1. Bunu yapmak doğru mu?


2. Soru şu ki, ders kitabında sunulan bilgileri kullanarak (bilgi çağı faktörünü kastediyorum) yeni yapılar için kod yazmak ne kadar sorunlu?



Listeden OnInit(), OnDeinit(), OnTick() ve diğerlerini kullanın:

Документация по MQL5: Обработка событий
Документация по MQL5: Обработка событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
 
Sergey Branin :

S. Kovalev'in kitabına göre MQL4 çalışmaya başladım, kodda tutarsızlıklar var. Kitap eski MT4 yapıları için yazılmıştır.


Hata olmaması için bu kodu nasıl işleyeceğimi söyle.

hata

'dönüş' - işlev bir değer döndürmelidir

1. Bunu yapmak doğru mu?


2. Soru şu ki, ders kitabında sunulan bilgileri kullanarak (bilgi çağı faktörünü kastediyorum) yeni yapılar için kod yazmak ne kadar sorunlu?



  1. Boş olmayan işlevlerden değerleri doğru bir şekilde döndürürsünüz, ancak yine de yeni raylara geçmek daha iyidir - orada karmaşık bir şey yoktur.
  2. Yaz, #property strict yönergesini kodun en başına eklemeyi unutma - tüm yönergelerin yazıldığı yerde, hata kodlarını oku - açıklamaları belgelerde ve her şey yolunda ve zor olmayacak.
 
Artyom Trishkin :
  1. Kapanan pozisyonlar listesinde dolaşın, kapanış saati ihtiyacınız olan günün başlangıç saatinden daha büyük olanları seçin

Teşekkür ederim, kapatılan pozisyonların açılış fiyatlarını ilk döngüde doğru zamanda buluyorum. Hepsi baskıda gösteriliyor ve üzerlerine arama izni vermem gerekiyor.

dizi benim için bir orman, açılış fiyatı için döngüleri nasıl kontrol edeceğimi ve ayarlayacağımı söyle, bu fiyatlar için ilk arama döngüsüne yatırım yap.

Peki, gerekli olanlardan en eskisinin fiyatına bahis yaparken, bir sonraki bulunan fiyata nasıl gidilir?
 void PriceTimePos( string sy= "" , int op=- 1 , int mn=- 1 )
  {
   datetime t;
   bool daa;
   int d,k_= OrdersTotal (),typ_;
   double    r= 0 ;
   int       i,k= OrdersHistoryTotal ();

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ))
        {
         if ( OrderSymbol ()== Symbol ())
           {
             if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL )
              {
               if (op< 0 || OrderType ()==op)
                 {
                   if (mn< 0 || OrderMagicNumber ()==mn)
                    {
                     if ( OrderCloseTime ()>= TimeCurrent ()- 1440 * 60 )
                       {
                        t= OrderCloseTime ();
                        r= OrderOpenPrice ();
                        sl= OrderStopLoss ();
                        tp= OrderTakeProfit ();
                        lot= OrderLots ();
                        typ_= OrderType ();
                         //Print("OpenPrice",r);

                         // ЕСТЬ ОРДЕР ПО ЦЕНЕ ЗАКРЫТОЙ ПОЗИЦИИ?
                        daa= false ;
                         for (i= 0 ; i<k; i++)
                          {
                           if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
                             {
                               if (( OrderSymbol ()==sy || sy== "" ) && (op< 0 || OrderType ()==op))
                                {
                                 if ( OrderType ()> 1 && OrderType ()< 6 )
                                   {
                                    d= MarketInfo ( OrderSymbol (), MODE_DIGITS );
                                    r= NormalizeDouble (r, d);
                                     if (r== NormalizeDouble ( OrderOpenPrice (),d)) daa= true ; //else continue;
                                   }
                                }
                             }
                          }
                         if (daa== false ) //ЕСЛИ НЕТ ОРДЕРА ПО ЦЕНЕ, СТАВЛЮ
                          {

                           if (r> Ask )
                             {
                               if (typ_== OP_BUY )
                                {
                                 Print ( "OP_BUYSTOP" ,r);
                                 SetOrder( Symbol (), OP_BUYSTOP ,lot,r,sl,tp,_MagicNumber, 0 , "bs" );
                                }
                               if (typ_== OP_SELL )
                                {
                                 Print ( "OP_SELLLIMIT" ,r);
                                 SetOrder( Symbol (), OP_SELLLIMIT ,lot,r,sl,tp,_MagicNumber, 0 , "sl" );
                                }
                             }

                           //
                           if ( Bid >r)
                             {
                               if (typ_== OP_BUY )
                                {
                                 Print ( "OP_BUYLIMIT" ,r);
                                 SetOrder( Symbol (), OP_BUYLIMIT ,lot,r,sl,tp,_MagicNumber, 0 , "bl" );
                                }
                               if (typ_== OP_SELL )
                                {
                                 Print ( "OP_SELLSTOP" ,r);
                                 SetOrder( Symbol (), OP_SELLSTOP ,lot,r,sl,tp,_MagicNumber, 0 , "bs" );
                                }
                             }

                          }
                         //return(r);
                       }
                    }
                 }
              }
           }
        }
     }
//
  }
 
PolarSeaman :

Teşekkür ederim, kapatılan pozisyonların açılış fiyatlarını ilk döngüde doğru zamanda buluyorum. Hepsi baskıda gösteriliyor ve üzerlerine arama izni vermem gerekiyor.

dizi benim için bir orman, açılış fiyatı için döngüleri nasıl kontrol edeceğimi ve ayarlayacağımı söyle, bu fiyatlar için ilk arama döngüsüne yatırım yap.

Dizilerin ne olduğunu anlamak ve anlamak, daha sonra bozduğunuz şeyi düzeltmekten daha hızlıdır.

Üstelik diziler basit değil, çok basit.

AK dergisi 30 mermi tutar - 30 büyüklüğünde bir dizidir. Ve mermiler dizide depolanan verilerdir.

Doğru, bu çok iyi bir örnek değil - 0, 1 ve 2 elde edene kadar üçüncüyü alamazsınız.

Peki, bir tablo hayal edin:

dizin 0
dizin 1
dizin 2
dizin 3
dizin 4
dizin5 dizin6 dizin 7
dizin 8
dizin 9
Değer 1
Değer 2
Değer 3
anlam 4
Değer 5
anlam 6
anlam 7
Değer 8
anlam 9
Değer 10

İşte 10 boyutunda basit bir tek boyutlu dizi.

1 değeri indeks 0 olan hücrede saklanır, 2 değeri indeks 1 olan hücrede saklanır, 3 değeri indeks 2 olan hücrede saklanır, ...
...
8 değeri indeksi 7 olan hücrede, 9 değeri indeksi 8 olan hücrede, 10 değeri indeksi 9 olan hücrede saklanır.

Her şey basit. 3 değerini elde etmek için diziye - 2 hücresine başvurmanız gerekir: Value3=Array[2];

Neden: