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

 
Alexey Viktorov :

Pekala, eğitiminize akarımı eklemeye çalışacağım.

Gönderdiğimde sizinle iletişime geçeceğim. İşaretçinin bir anlık görüntüsü var ...

Lütfen söyleyin, bir işlevi tek tıkla 5 kez çağırmak yanlış görünmüyor mu? Ama bu sorunun yarısı. Bu işlev tüm siparişleri yineler. Ve tüm bunlar tek seferde 5 kez... Ve böyle 4 fonksiyon saydım.Bütün siparişlerin bir numaralandırma döngüsü ile bir döngüde 3 fonksiyon daha eklemek için beyni zorlamak değil.

İşte onlardan ikisi.

Bu

takip yakın bile gelmiyor.

Bunu anlamak için, takip etmenin ne olduğunun tanımını açıkça anlamanız gerekir. Kelimenin tam anlamıyla hatırlamıyorum, ama şöyle bir şey: "Olası bir kaybı azaltmak veya "garantili" bir karı artırmak için fiyatı takip eden StopLoss seviyesini hareket ettirmek."

Ama bu

EA başlatıldığında nasıl görünüyor? Muhtemelen dört satır... gerekli mi?

Ve bugün için son şey: Kafanızda bir kütüphane olmasına gerek yok. Belgelerinizin olması ve kullanabilmeniz yeterlidir. Hala bellek için tüm iMA(_Symbol, _Period, ,,,,,) parametrelerini yazamıyorum ve yalnızca belgelere baktıktan sonra yazıyorum. Ve böylece neredeyse tüm fonksiyonlar. Ama neyse ki, çok uzun zaman önce çok fazla tasarruf etmeyen araç ipuçları yaptılar. Belirli numaralandırmaların nasıl yazıldığını hatırlamaya çalışmıyorum. Bu yüzden her seferinde belgelere gitmelisiniz.


Alexey, bilgi için teşekkürler. Evet, kodun optimal olmadığını kabul ediyorum, sadece bir programcı değilim ve bahsettiğiniz incelikleri hala bilmiyorum. Bu tür nüanslar benim için basitçe anlaşılmaz - hepsini nasıl optimize edeceğim belli değil - ilerlemeye devam edersem belki bir süre sonra bitiririm. Şimdi, optimize etmeye başlarsam, sadece her şeyi bozacağımdan eminim. Pekala, bunlar acemi kodlayıcılar için MT4'ün maliyetleri, ancak sitede diğer danışmanların kodlarını gördüm - genel olarak çok fazla şey var! - tabii ki, bir profesyonel kodlamışsa, kodu terminali benimkinden daha az yükleyebilir, evet, elbette, ama şu ana kadar yorumlarınızı dikkate alamıyorum çünkü kesinlikle bu programlama inceliklerini anlamıyorum optimizasyon. Ve koddaki işlevlere yapılan bazı çağrıları kaldırırsanız, EA kesinlikle kaos yaşamaya başlayacak ve gerekli olmadığında siparişleri açmaya başlayacaktır. Orada kodladım, test ettim - hiçbir şey yolunda gitmedi veya yanlış gitti, düzelttim, sonuç olarak, son kod böyle çıktı, bilgi bagajımdan anladığınız gibi artık optimizasyona bağlı değildim.

Takip hakkında - en önemli şey, karı takip etmesi, geliştirmenin bu aşamasında bana uyuyor))) Ve sonuçta, eski ve yeni takip eden kod aynı yolu izliyor ve işlem sayısı aynı - doğal olarak, ben izlemenin ortaya çıktığı sonucuna vardı, ancak izlemenin yine de çalışması gereken bu ortamda nasıl doğru bir şekilde yapılacağını kimse söylemiyor ve ayrıca bu konuda hiçbir fikrim yok - tüm kodum bir LEGO kurucusudur - yani, bir araya getirdim video eğitimlerinin materyallerinden. Tabii ki, biraz benim var - bu aslında danışmanın algoritmasının kendisi ve tüm kod ve işlevler benim buluşum değil, TradeLikeaPro ile video eğitimlerinden ve kodu tam olarak analoji ve için "düzenledim" ihtiyaçlarım - algoritmam için. Sonunda ne olduğu ortaya çıktı.

 
geratdc : tüm kodum bir LEGO kurucusudur - yani, onu TradeLikeaPro ile video eğitimlerinin materyallerinden derledim ve kodu tam olarak analojiyle ve ihtiyaçlarım için - algoritmam için "düzenledim". Sonunda ne olduğu ortaya çıktı.

Para yatırma planına baktım - ilgilendim ve ilk sürümü indirdim. MetaEdit'te kopyalandı. İki uyarı. İlki, int timeprev=0 değiştirilerek elendi; tarihsaat zamanprev=0; Sonuçta bu değişken tarihte. İkinci işaret ediyor

tp=TakeProfit;             // В переменную tp заносится значение переменной TakeProfit
if(tp>TakeProfit)          // А тут они сравниваются. А с чего им быть разными, если только что уравняли?
{
   TakeProfit+=tp;
}

Son üç satırı silindi. Temiz bir şekilde iletir. Daha ileri gidelim...

 //| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   if ( Digits == 3 || Digits == 5 )  // После этой строки нужны фигурные скобки.
      TakeProfit     *= 10 ;        // иначе эта строка будет выполняться по условию

      // а следующие строки будут выполняться всегда
      Step           *= 10 ;
      TrailingStep   *= 10 ;
      TrailingStop   *= 10 ;
      Slippage       *= 10 ;

      
   return ( INIT_SUCCEEDED );
  }

remade (açıklama için bir komut dosyası eklendi - çalıştırın, açıklayacaktır) böyle

 //| Инициализация на пятизнак или иену                               |
//+------------------------------------------------------------------+
void OnInit ()
{
   if ( Digits == 3 || Digits == 5 )
   {
      TakeProfit     *= 10 ;
      Step           *= 10 ;
      TrailingStep   *= 10 ;
      TrailingStop   *= 10 ;
      Slippage       *= 10 ;
   }
}
 //+-------------------------------------------------------+
//| Демонстрация назначения фигурных скобок      PROBA.mq4|
//+-------------------------------------------------------+
#property strict

void OnStart ()
{
   // Без фигурных скобок
   if ( 2 == 5 )
     Alert ( "Это сообщение будет пропущено" );
     Alert ( "Без фигурных скобок это сообщается, хотя по логике зря" );

   Alert ( "-------------------------------" );
   Alert ( "А вот со скобками - полный молчок" );
   if ( 2 == 5 )
  {
     Alert ( "Это сообщение будет пропущено" );
     Alert ( "Со скобками это тоже пропускается" );
  }
}
İşte sonuç


Bu işlevi sildim - ona çağrı yok ve gövdesi boş

 //+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---

  }

Kaçmaya çalıştı ve gördü:

Öyleydi

değişiklikler yaparak - peki, sadece yorumlar eklendi ve Magic'ten harici kaldırıldı - sadece danışman aynı enstrüman ve Slippage ile iki çizelgede başlatıldığında değiştiririz - neden bu parametreyi değiştirelim? Sonra düşündüm ve parametreleri 10 kat arttırdım. Ve OnInit işlevi kaldırıldı. Sonuçta, sadece beş işaret kullanıyorum. Niye ya? Evet, dört basamaklı bir dağılımda 3 puan, 30 çıkıyor. Ve beş basamaklı sadece 12

böylece daha net oldu

 extern double   Lots           = 0.01 ;   // Размер лота
extern int      TakeProfit     = 5 0;    // Ограничение прибыли Take Profit
extern int      Step           = 2 0;    // Шаг - чего, выясним позже

extern int      TrailingStep   = 3 0;    // Шаг трала
extern int      TrailingStop   = 10 ;    // Ограничение убытка

extern int      MaPeriod       = 200 ;   // Период МА (надо поменьше?)
extern int      MaShift        = 1 ;     // Сдвиг МА (взял бы 0)

       int      Magic          = 123 ;   // Магик - нужен ли он?
       int      Slippage       = 50 ;    // Проскальзывание

datetime timeprev= 0 ;

double price,op,cn,tp;  // Убрал extern

Şapkanın üst kısmını kesin. İşte geriye kalanlar:

 //+------------------------------------------------------------------+
//|                                                      -Э-1111.mq4 |
//+------------------------------------------------------------------+
#property strict

işte bu çizgi

   op=CalculateProfit();
   if (CalculateProfit()>=tp) CloseAll();

talep yerine daha düşük taşındı. Böyle çıktı

   op=CalculateProfit();
   if (op>=tp)
   {
         CloseAll();    
   }

Sonra en başta op değişkeninin açıklamasını attım ve şöyle değiştirdim

   if (CalculateProfit()>=tp) CloseAll();

OnTick işlevinin başında birkaç satır vardır. Böylece her tik yerine her çubuk için sadece 1 kez işlem yapılır.

   if (timeprev == Time [ 0 ]) return ;   // сравнить  время начала последнего бара с временем обработанного бара. Если равны, то выход
   timeprev = Time [ 0 ];               // Запомнить время начала следующего бара      На часовом и далее это будет слабо

Daha sonra MA hesaplanır. Burada daha ayrıntılı çalışmanız gerekiyor. Bunu yapmak için bir komut dosyası yazdım ve sonucu gösterdim

   double maprice= iMA ( Symbol (), 0 ,MaPeriod,MaShift, MODE_SMA , PRICE_CLOSE , 1 );
 //+-------------------------------------------------------+
//| Проверка функции iMA                         PROBA.mq4|
//+-------------------------------------------------------+
#property strict

void OnStart ()
{
   int MaPeriod= 200 ;
   int MaShift= 1 ;

   Alert ( "MaShift = " , MaShift);
   for ( int Бар= 0 ; Бар< 5 ; Бар++)
   Alert ( "Бар = " , Бар, "   Ma = " ,
     iMA ( Symbol (), 0 ,MaPeriod,MaShift, MODE_SMA , PRICE_CLOSE ,Бар));

   Alert ( "-------------------------" );
  MaShift= 0 ;
   Alert ( "MaShift = " , MaShift);
   for ( int Бар= 0 ; Бар< 5 ; Бар++)
   Alert ( "Бар = " , Бар, "   Ma = " ,
     iMA ( Symbol (), 0 ,MaPeriod,MaShift, MODE_SMA , PRICE_CLOSE ,Бар));
} 

MaShift'in dördüncü parametresinin ve son parametrenin toplandığı görülebilir, yani. çubuk numarası = bunların toplamı. MA, çubuk 2'den, sondan üçüncü çubuktan alınır.

Daha fazla bakacağım. Ilgilenen?

 
STARIJ :
...

Daha fazla bakacağım. Ilgilenen?

Konuyu gündeme getirmeye devam ediyor musun?

Yeter artık - insanlar ilgilenen konuyu takip ediyor, ancak boşuna gündeme getirildi.

Birinin size cevap vermesini istiyorsanız, onu konuya çağırın. Bunun gibi: @STARİJ . Ancak konunun, son gönderinizi düzenleyerek sürekli gündeme getirilmesine gerek yoktur.


 
Victor Nikolaev :

Yani birisi şanssız. Tekrar. Bu bir komut dosyasıdır, danışman veya gösterge değil

Anladım - görünüşe göre terminalin yeterli belleği yoktu - birkaç tabloyu kapattım ve işe yaradı.

Teşekkürler - gerçekten de hesaplamalar yapılıyor.

Değişkenler int değil bool türündeyse ne yapmalı?

 

Merhaba, lütfen söyle:

1 - Kayıt sadece bireysel olarak mı yapılır yoksa tüzel kişilik olarak da mümkün mü ve herhangi bir kısıtlama ve koşul var mı?

2 - bir hesaba sahip olmak için sosyal ağlarla herhangi bir senkronizasyon var mı (giriş ve şifre)

3 - "Sayfanıza bir widget koy, bir sinyal paylaş" işlevini de gördüm - bir web sitesinden veya başka bir şeyden bahsediyoruz


 
Merhaba. Çok yakın zamanda Mql4 öğrenmeye başladım. Yanlış yere soru sorduysam lütfen beni doğru konuya yönlendirin. Ve soru şu ki, bana çeşitli bölgeler, dikdörtgenler vb. Oluşturan göstergelerle nasıl çalışılacağını söyleyin. iCustom ile hatların kesişimini biraz programlayabilirim veya fiyat daha düşük, diyelim MA) Aşağıya göstergeyi ekledim, sadece dört tampon var ve sekiz çeşit bölge var. Ve şimdi gerçekten nasıl kod yazacağımı, telefonu nasıl kapatacağımı veya bu bölgeleri nasıl aşacağımı anlayamıyorum.
 
STARIJ :

Para yatırma planına baktım - ilgilendim ve ilk sürümü indirdim. MetaEdit'te kopyalandı. İki uyarı. İlki, int timeprev=0 değiştirilerek elendi; tarihsaat saatprev=0; Sonuçta bu değişken tarihte. İkinci işaret ediyor

*

Cevap

Belki de bunun nedeni, video eğitiminde kar al'ın int türünde olması ve ben onu iki katına çıkardım, bu nedenle int timeprev kodunun önceki yazımı olduğu gibi kaldı. Tamam, bunu düzelteceğim, ama genel olarak, bu danışmanın işini nasıl etkiler? Aslında, bu çubuklar ve zaman, video eğitimindeki TrailingStop işleviyle alakalıydı, ancak bu işlevi kendiminkiyle değiştirdiğim için, yalnızca kaynak kodun bir kalıntısı olarak kaldı ve aslında, izlemem, bar zamanı.


Son üç satırı silindi. Temiz bir şekilde iletir. Daha ileri gidelim...

remade (açıklama için bir komut dosyası eklendi - çalıştırın, açıklayacaktır) böyle

İşte sonuç

*Cevap

Bu kod parçası nereye gitti?

    return ( INIT_SUCCEEDED );
  }

Belki de böyle olmalıdır?


geçersiz OnInit()

{

if(Rakamlar == 3 || Rakamlar == 5)

{

adım *= 10;

İzleyenAdım *= 10;

takip eden durak *= 10;

kayma *= 10;

}

dönüş(INIT_SUCCESSED);

}

TakeProfit'i neden bir int tipi yaptınız, bu, kârın puan cinsinden olacağı anlamına geliyor ve CalculateProfit() işlevi çift tip, bu yüzden tutarlı olmaları için TakeProfit'i aynı tip yaptım.


Bu işlevi sildim - ona çağrı yok ve gövdesi boş

*

Cevap

Kodun içinde böyle bir void işlevi var CloseAll () Bir şekilde bu işlevle bağlantılı olduğunu düşündüm

 //+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---

  }

*

Cevap

Tamam silelim.


Koşmaya çalıştı ve gördü:

Öyleydi

değişiklik yaparak - peki, sadece yorumlar eklendi ve Magic'ten harici kaldırıldı

*

Cevap

Evet, belki extern gereksizdir, çünkü Slippage gibi hiç değiştirmedim - hepsi video eğitiminin kaynak kodundandı

- sadece aynı enstrüman ve Slippage ile iki çizelgede Expert Advisor'ı başlatırken değiştiriyoruz - neden bu parametreyi değiştirelim? Sonra düşündüm ve parametreleri 10 kat arttırdım. Ve OnInit işlevi kaldırıldı. Sonuçta, sadece beş işaret kullanıyorum. Niye ya? Evet, dört basamaklı bir dağılımda 3 puan, 30 çıkıyor. Ve beş basamaklı sadece 12

*

Cevap

Bu nedenle, varsayılan olarak danışmanın tüm para birimlerinde çalıştığı kabul edildi. Oninit'i () kendime saklayacağım.

böylece daha net oldu

Şapkanın üst kısmını kesin. İşte geriye kalanlar:

*

Cevap

Bu başlık, varsayılan olarak editör tarafından yapılır. Olduğu gibi bırakacağım, aksi takdirde bu hatların olmaması nedeniyle komisyoncuda veya terminalde bir şey kaymaz.

işte bu çizgi

talep yerine daha düşük taşındı. Böyle çıktı

Sonra en başta op değişkeninin açıklamasını attım ve şöyle değiştirdim

*

Cevap

Temelde mantıklı.



OnTick işlevinin başında birkaç satır vardır. Böylece her tik yerine her çubuk için sadece 1 kez işlem yapılır.

Daha sonra MA hesaplanır. Burada daha ayrıntılı çalışmanız gerekiyor. Bunu yapmak için bir komut dosyası yazdım ve sonucu gösterdim


MaShift'in dördüncü parametresinin ve son parametrenin toplandığı görülebilir, yani. çubuk numarası = bunların toplamı. MA, çubuk 2'den, sondan üçüncü çubuktan alınır.

*

Cevap

Sonucumun değişmesi nedeniyle, Hareketli Ortalama veri süresinin alakalı olmadığını düşünüyorum. Bu, kaynak kodun bir kalıntısıdır, son 3 (üç) açık siparişi takip etmeye çalışırdım. Gerçek şu ki, danışmanım bir emir açar, o zaman piyasa STep değeri ile yanlış yöne giderse, danışman bir karşı emir açar, o zaman piyasa ters yönde ilerlemeye devam ederse, üçüncü bir emir eklenir. ikinci pozisyonun emir tipi veya tam tersi eğer fiyat yönü döndürürse üçüncü emir ilk emrin tipi ile açılacaktır (al veya sat) Burada, CalculateProfit() fonksiyonu aracılığıyla üç emir takip edilir. , ancak, ilk sipariş başarılı bir şekilde açıldıysa ve fiyat olması gerektiği gibi hareket ederse, o zaman böyle bir durumda, çubuğu tarih saat boyunca takip etmek video dersindeki gibi olurdu ve bunu kullanarak 1 sipariş için bile tekrarlayacağım kar hesapla() işlevi

Daha fazla bakacağım. Ilgilenen?

*

Cevap

Evet, trolle ilgili sorularım var. Trol gibi görünüyor, ama kimse onunla orada aldattığım bir şeyi araştırmak konusunda isteksiz değil. Çubuklardan ve tarih saatinden ayrı takip - bunlar Trailing() işlevleridir

Yaklaşık MA dönemi var - bunu 200 olarak belirtmişsiniz ama mesele şu ki bu benim için özel bir değer. Ve görünüşe göre Value anahtar parametresi eksik - orada BENİOKU dosyasının açıklamasında anlamını açıkladım.



Bütün bunları giydiğin için teşekkürler. Expert Advisor aslında şöyle böyle - mekaniktir, diyebilirim. Ancak prensipte, çalışmasını kurar ve ara sıra kontrol ederseniz, tamamen hiçbir şey olamaz. Zaman gösterecek. Muhtemelen bir şeyler kazanabilir, ancak gözlerini kırpmayacak ve bir metin mesajı bile göndermeyecek - bununla uğraşmadım - fikir, düşüş% 30'dan fazlaysa bir SMS göndermekti. mevduat gerçekleşti - bu, 3 siparişin zaten açık olduğu ve piyasanın karşı hareketinin gittiği anlamına gelir, böyle bir durumda gazyağı gibi kokar. Diğer tüm danışmanlar, alım satım aracının grafik davranışının geçmişine ayarlanıp ayarlanmadığını çözer.


Not Defteri'ndeyken kodda önerilen (hepsini değil) değişiklikleri yaptım. Lütfen kodu doğru düzeltip düzeltmediğimi kontrol edin?

Optimizasyondan yanayım, ancak oninit'i sildiğiniz anları hesaba katmadım - tüm para birimleri üzerinde test edip çalışabilmem için buna ihtiyacım var)))

Dosyalar:
 
Aleksandr Verkhozin :
Merhaba. Çok yakın zamanda Mql4 öğrenmeye başladım. Yanlış yere soru sorduysam lütfen beni doğru konuya yönlendirin. Ve soru şu ki, bana çeşitli bölgeler, dikdörtgenler vb. Oluşturan göstergelerle nasıl çalışılacağını söyleyin. iCustom ile hatların kesişimini biraz programlayabilirim veya fiyat daha düşük, diyelim MA) Aşağıya göstergeyi ekledim, sadece dört tampon var ve sekiz çeşit bölge var. Ve şimdi gerçekten nasıl kod yazacağımı, telefonu nasıl kapatacağımı veya bu bölgeleri nasıl aşacağımı anlayamıyorum.

TradeLikeApro'nun rutracker derslerinde mql4 programlama torrent video eğitimlerini Yandex'i indirin. Genel programlama örnekleri olmadan, neyin ne olduğunu anlamak zor - sadece video eğitimlerinden geçtim, ama aptal olduğum için bu işte kaldım))) Belki ilerleme kaydedersiniz.
 

geratdc :

...
Evet, trolle ilgili sorularım var. Trol gibi görünüyor, ama kimse onunla orada mahvettiğim bir şeyi araştırmak konusunda isteksiz değil.

...

Biliyorsunuz, tam bu başlıkta, kendisine iletilen gösterge değerini hesaplamalarında kullanan trol için bir şablon yayınladım. Arayın tembel olmayın.
 
geratdc :

TradeLikeApro'nun rutracker derslerinde mql4 programlama torrent video eğitimlerini Yandex'i indirin. Genel programlama örnekleri olmadan, neyin ne olduğunu anlamak zor - sadece video eğitimlerinden geçtim, ama aptal olduğum için bu işte kaldım))) Belki ilerleme kaydedersiniz.


Harici bir göstergeyle çalışma hakkında bir video izledim, test cihazındaki arabellek değerlerini görüntülemek için küçük bir kod yazdım:

geçersiz OnTick()

{

double Buf1=iCustom(NULL,0,"Shved-Supply-and-Demand-e600",0,1);

double Buf2=iCustom(NULL,0,"Shved-Supply-and-Demand-e600",1,1);

double Buf3=iCustom(NULL,0,"Shved-Arz-ve-Talep-e600",2,1);

double Buf4=iCustom(NULL,0,"Shved-Supply-and-Demand-e600",3,1);

Yorum ("Buf1=",Buf1,"\n", "Buf2=",Buf2,"\n","Buf3=",Buf3,"\n","Buf4=",Buf4);

}

Görüntüleme modundaki bölgeler görünür ve kaybolur. Ve tamponların değeri hep aynı, her zaman sıfır. Bu bölgeleri kodda resmileştirmek gerçekten imkansız mı?

Belki iCustom'un yanı sıra bu tür göstergeler için uygun olan bazı işlevler vardır? Belki birileri benzer göstergelere sahip baykuşlar yazdı?