MQL5 dilini sıfırdan kendi kendine öğrenme - sayfa 58

 
MrBrooklin :

Varsayılan bir şablon oluşturdu. İçine kod yazmaya başladım ve burada zaten yazılmış olan parçaları düzenlemeye başladım. İşlevleriyle birlikte algoritmanın çerçevesine gelince, bunu düşünmedim, önerdiğiniz için teşekkürler! Ayrıca netleştirme hesabıyla ilgili ipucu için teşekkürler!


soyut olarak, okuryazarlık programlamanın böyle bir hilesi var - çok hızlı ve net bir şekilde yazmanıza izin veriyor.

Genel anlamda, edebi tarzda, ne yapacağınızı yorumlara yazın (sadece ana doğrudan sıra)

// тралим стоп-лосс единственного ордера по сигналу от тиков

// прим.) трал - подтягиваем стоп-лосс следом за ценой, 

void TrallOnTick() {

// берём рыночный ордер (для 5-ки позицию)

        // смотрим сколько пунктов от текущей цены до стоп-лосс

        // если больше чем требуемая дистанция

        // переносим стоп-лосс

}

temelde her şey. Ayrıca her yorumdan sonra 3-5 (genel olarak biraz) satırlık bir kod yazılır. Baştan sona tüm fonksiyona sahip olmanız, gördüğünüz ekrana sığmalıdır. Daha fazlası ortaya çıkarsa, parçaları ayrı işlevlere/yöntemlere ayırmak gerekir.

Test cihazında böyle basit bir şey çalışmaya başladığında, genelleme yapabilir, gerçek hayattan koşullar ekleyebilir, örneğin adım veya frekansı değiştirebilir, piyasa koşullarını dikkate alabilirsiniz, mükemmelliğin sınırı yoktur..

 
Maxim Kuznetsov :

soyut olarak, okuryazarlık programlamanın böyle bir hilesi var - çok hızlı ve net bir şekilde yazmanıza izin veriyor.

Genel anlamda, edebi tarzda, ne yapacağınızı yorumlara yazın (sadece ana doğrudan sıra)

// тралим стоп-лосс единственного ордера по сигналу от тиков

// прим.) трал - подтягиваем стоп-лосс следом за ценой, 

void TrallOnTick() {

// берём рыночный ордер (для 5-ки позицию)

        // смотрим сколько пунктов от текущей цены до стоп-лосс

        // если больше чем требуемая дистанция

        // переносим стоп-лосс

}

temelde her şey. Ayrıca her yorumdan sonra 3-5 (genel olarak biraz) satırlık bir kod yazılır. Baştan sona tüm fonksiyona sahip olmanız, gördüğünüz ekrana sığmalıdır. Daha fazlası ortaya çıkarsa, parçaları ayrı işlevlere/yöntemlere ayırmak gerekir.

Test cihazında böyle basit bir şey çalışmaya başladığında, genelleme yapabilir, gerçek hayattan koşullar ekleyebilir, örneğin adım veya frekansı değiştirebilir, piyasa koşullarını dikkate alabilirsiniz, mükemmelliğin sınırı yoktur..

Merhaba Maxim! İpuçlarınızla çok yardımcı oldunuz! Sonra oturup danışmanın standart şablonunu nasıl dolduracağımı düşünüyorum.

Saygılarımla, Vladimir.

 
MrBrooklin :

Sevgili programlama uzmanları!

Lütfen iki soruyu açıklayın:

  1. İlk soru Sihirli Sayı ile ilgili - giriş parametrelerinde yalnızca bekleyen emirler ve açık pozisyonlar için mi (veya sadece açık pozisyonlar için mi?) mi yaratılıyor, yoksa EA'nın kendisi için de oluşturulabilir mi? Ve eğer cevap "mümkün" ise, o zaman hangi amaçla yapılmalıdır. Bu soruyla ilgili kafamda bir karışıklık var ama henüz mantıklı bir cevap bulamadım.
  2. Sihirli Sayı ile ilgili ikinci soru - mevcut grafikte birkaç açık pozisyon varsa, pozisyonların her birini belirlemek için aşağıdaki giriş parametresi kullanılabilir:

Magic Number'ın programlamada kullanımına dair doğru bir anlayışa sahip olmamam mümkün.

Saygılarımla, Vladimir.

Bir emrin yürütülmesi için kabul edildiğinde, tüm özellikleri (sembol, yerleştirme zamanı, emir türü, bilet) kullanıcı tarafından değil terminal tarafından atanır (kullanıcı tarafından istenir, ancak terminal tarafından atanır) ve pozisyon ile aynı, pozisyon emirleri hakkında bilgi depolar, ancak çok fazla olabilir. Sihirli sayı bir kullanıcı kimliğidir. Alıntı:

Yeni bir bekleyen istek oluştururken, bunu bir şekilde işaretlememiz gerekir - böylece program, bu özel siparişin bu bekleyen istek için ABD tarafından verildiğini bilebilir - yani, siparişi veya pozisyonu benzersiz bir şekilde tanımlamamız ve belirli bir pozisyonla ilişkilendirmemiz gerekir. bekleyen istek  

NAMI noktayı kaçırdı. Sonra Artem, siparişlerin sınıflandırmasını Sihirli Sayıya koyar. Neden olmasın, ilk 2 hane ya siparişin türü, örneğin sonraki 4 hane ya da siparişin verildiği tarih anlamına gelir.

Bir şeyin algoritması ile ilgili. İlk önce başlangıç koşullarını belirleyin. Sembolümüzde emirler var ve sihri hesaba katmıyoruz ya da yapıyoruz. Başlangıç koşulları olmadan, bir algoritma oluştururken değişiklik ve hatta dahası bir kod sonsuz olabilir)

 
Maxim Kuznetsov :

soyut olarak, okuryazarlık programlamanın böyle bir hilesi var - çok hızlı ve net bir şekilde yazmanıza izin veriyor.

Genel anlamda, edebi tarzda, ne yapacağınızı yorumlara yazın (sadece ana doğrudan sıra) ...

... temelde her şey. Ayrıca her yorumdan sonra 3-5 (genel olarak biraz) satırlık bir kod yazılır. Baştan sona tüm fonksiyona sahip olmanız, gördüğünüz ekrana sığmalıdır. Daha fazlası ortaya çıkarsa, parçaları ayrı işlevlere/yöntemlere ayırmak gerekir.

Maxim, bak lütfen, ipucunu doğru mu yakaladım yoksa başka bir şey eklenmesi gerekiyor mu? Bu, test kısmı anlamına gelir, çünkü. Henüz herhangi bir kod yazmadınız.

Saygılarımla, Vladimir.

 //+------------------------------------------------------------------+
//|                                                Trailing_Stop.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
// установим входные параметры: "Уровень перестановки Stop Loss в безубыток" и "Шаг трейлинга"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
//    тралим стоп-лосс единственной открытой позиции по сигналу от тиков
void OnTick ()
  {
//---

// 1. берём позицию Buy
// 2. смотрим сколько пунктов прошла текущая цена в нужном направлении от той цены, по которой открылась позиция:
//    - если количество пунктов больше, чем задано во входном параметре "Уровень перестановки Stop Loss в безубыток"
//    - тогда переносим стоп-лосс на уровень цены, по которой открылась эта позиция
// 3. смотрим сколько пунктов прошла текущая цена в нужном направлении от той цены, при которой мы перенесли 
//    стоп-лосс на уровень цены открытия позиции:
//    - если количество пунктов больше, чем задано во входном параметре "Шаг трейлинга"
//    - тогда переносим стоп-лосс на количество пунктов, укзанных во входном параметре "Шаг трейлинга"
// 4. берём позицию Sell и выполняем все те же действия, описанные в пунктах 2 и 3
  }
//+------------------------------------------------------------------+
 
MrBrooklin :

Maxim, bak lütfen, ipucunu doğru mu yakaladım yoksa başka bir şey eklenmesi gerekiyor mu? Kodlar hariç test kısmı anlamına gelir.

Saygılarımla, Vladimir.

Başlangıç koşulları. Sembolümüzde bir pozisyon olduğunu düşünüyoruz ve bunu grafikte görüyoruz.

Bir pozisyon için, o zaman sadece bir tanesidir, ya al ya da sat. Bu nedenle, önce sembolümüzdeki pozisyonları arayın. İstek/alma özellikleri. Alım veya satım pozisyonunun türünü belirleme. Ve daha sonra metinde.

 
Valeriy Yastremskiy :

Bir emrin yürütülmesi için kabul edildiğinde, tüm özellikleri (sembol, yerleştirme zamanı, emir türü, bilet) kullanıcı tarafından değil terminal tarafından atanır (kullanıcı tarafından istenir, ancak terminal tarafından atanır) ve pozisyon ile aynı, pozisyon emirleri hakkında bilgi depolar, ancak çok fazla olabilir. Sihirli sayı bir kullanıcı kimliğidir. Alıntı:

Yeni bir bekleyen istek oluştururken, bunu bir şekilde işaretlememiz gerekir - böylece program, bu özel siparişin bu bekleyen istek için ABD tarafından verildiğini bilebilir - yani, siparişi veya pozisyonu benzersiz bir şekilde tanımlamamız ve belirli bir pozisyonla ilişkilendirmemiz gerekir. bekleyen istek  

NAMI noktayı kaçırdı. Sonra Artem, siparişlerin sınıflandırmasını Sihirli Sayıya koyar. Neden olmasın, ilk 2 hane ya siparişin türü, örneğin sonraki 4 hane ya da siparişin verildiği tarih anlamına gelir.

Bir şeyin algoritması ile ilgili. İlk önce başlangıç koşullarını belirleyin. Sembolümüzde emirler var ve sihri hesaba katmıyoruz ya da yapıyoruz. Başlangıç koşulları olmadan, bir algoritma oluştururken değişiklik ve hatta dahası bir kod sonsuz olabilir)

Ayrıntılı cevap için teşekkürler Valery. Çok şey netleşti. Algoritma ile ilgili olarak, aynı konuma sahibim, ancak Vasily, bu Uzman Danışman'da Magic Number'a neden ihtiyaç duyulmadığını zaten açıkladı.

Saygılarımla, Vladimir

 
MrBrooklin :

Ayrıntılı cevap için teşekkürler Valery. Çok şey netleşti. Algoritma ile ilgili olarak, aynı konuma sahibim, ancak Vasily, bu Uzman Danışman'da Magic Number'a neden ihtiyaç duyulmadığını zaten açıkladı.

Saygılarımla, Vladimir

Aslında buna gerçekten gerek yok, ilk koşullar altında grafiği açtık ve grafik sembolünde bir pozisyon var, hangisini bilmiyoruz ve başa baş ve sonra kayıpları azaltmak için SL'yi takip etmek istiyoruz. bir fiyat dönüşü.

 

Valery'den gelen değişiklikleri dikkate alarak, yorumlar içeren EA şablonu yeni bir görünüme kavuşmuştur.

Saygılarımla, Vladimir.

 //+------------------------------------------------------------------+
//|                                                Trailing_Stop.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
// установим входные параметры для "Уровня перестановки Stop Loss в безубыток" и "Шага трейлинга"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
//    тралим стоп-лосс единственной открытой позиции по сигналу от тиков
void OnTick ()
  {
//---
// 1. ищем все позиции на текущем символе:
//    - отправляем запрос на сервер и получаем характеристики открытых позиций
//    - определяем тип открытой позиции - Buy или Sell 
// 2. берём позицию Buy
// 3. смотрим сколько пунктов прошла текущая цена в нужном направлении от той цены, по которой открылась позиция:
//    - если количество пунктов больше, чем задано во входном параметре "Уровень перестановки Stop Loss в безубыток"
//    - тогда переносим стоп-лосс на уровень цены, по которой открылась эта позиция
// 4. смотрим сколько пунктов прошла текущая цена в нужном направлении от той цены, при которой мы перенесли 
//    стоп-лосс на уровень цены открытия позиции:
//    - если количество пунктов больше, чем задано во входном параметре "Шаг трейлинга"
//    - тогда переносим стоп-лосс на количество пунктов, укзанных во входном параметре "Шаг трейлинга"
// 5. берём позицию Sell и выполняем все те же действия, описанные в пунктах 2 и 3
  }
//+------------------------------------------------------------------+
 

Vladimir, onu uzun süre kullanmana gerek yok. Hadi dövüşelim. Sizin için istenen takip için bir şablon yazdım:

 //+------------------------------------------------------------------+
//|                                                  TestingTral.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MrBrooklin"
#property link        "http://www.mql5.com"
#property version    "1.00"
input double BreakevenValue = 100.0 ; // Величина безубытка, в пунктах инструмента
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   //-- Выбираем позиции по текущему символу. Если позиции нет выбирать нечего - выходим
   if (! PositionSelect ( Symbol ()))
       return ;
   //-- Стоп-лосс длинной позиции переставляем в безубыток и тралим его
   if ( PositionGetInteger ( POSITION_TYPE ) == POSITION_TYPE_BUY )
   {
      SetBreakevenForBuyPosition();
      TrailingStopLossForBuyPosition();
   }
   //-- Стоп-лосс короткой позиции переставляем в безубыток и тралим его
   else if ( PositionGetInteger ( POSITION_TYPE ) == POSITION_TYPE_SELL )
   {
      SetBreakevenForSellPosition();
      TrailingStopLossForSellPosition();
   }
  }
//+------------------------------------------------------------------+
//| Устанавливает sl позиции BUY в безубыток                         |
//+------------------------------------------------------------------+
void SetBreakevenForBuyPosition()
  {
   ;   
  }
//+------------------------------------------------------------------+
//| Тралит стоп-лосс позиции BUY вслед за ценой                      |
//+------------------------------------------------------------------+
void TrailingStopLossForBuyPosition()
  {
   ;   
  }
//+------------------------------------------------------------------+
//| Устанавливает sl позиции SELL в безубыток                        |
//+------------------------------------------------------------------+
void SetBreakevenForSellPosition()
  {
   ;   
  }
//+------------------------------------------------------------------+
//| Тралит стоп-лосс позиции BUY вслед за ценой                      |
//+------------------------------------------------------------------+
void TrailingStopLossForSellPosition()
  {
   ;   
  }
//+------------------------------------------------------------------+

Tek ihtiyacınız olan fonksiyonları isimlerine karşılık gelen mantıkla doldurmak. Gördüğünüz gibi, şablon temeldir. Ve yapısal olarak TK'ye benzer.

Bu kodun derlendiğini not ediyorum, yani. derleyicinin bakış açısından doğru. Her zaman bu durum için çabalayın: yani. Geliştirme sırasında küçük değişiklikler yapın, böylece bunları yaptıktan sonra kod derlenebilir. Ayrıca "0 hata, o uyarılar" derleyici mesajını da hedefleyin. Elbette program hatalarla başlatılamaz ama derleyici uyarıları atamız olarak alınmalı: bir uyarı varsa düzeltilmeli. Bu şablon " 0 hata, o uyarılar" ile yapılmıştır - geliştirmenin sonuna kadar bu durumu koruyun.

Mantığı çözdüğümüzde ve derleyiciyi bulduktan sonra geriye sadece fonksiyonlara gerekli mantığı sağlamak kalıyor.

İkinci parametre olan trolün boyutu şimdilik bir sonraki versiyona aktarılacak. Ekstra gerekecek. hesaplamalar. Bu nedenle, bu şablona dahil edilmemiştir. Trol her tik çekecektir.

 
Vasiliy Sokolov :

Vladimir, onu uzun süre kullanmana gerek yok. Hadi dövüşelim. Sizin için istenen takip için bir şablon yazdım:

Tek ihtiyacınız olan fonksiyonları isimlerine karşılık gelen mantıkla doldurmak. Gördüğünüz gibi, şablon temeldir. Ve yapısal olarak TK'ye benzer.

Bu kodun derlendiğini not ediyorum, yani. derleyicinin bakış açısından doğru. Her zaman bu durum için çabalayın: yani. Geliştirme sırasında küçük değişiklikler yapın, böylece bunları yaptıktan sonra kod derlenebilir. Ayrıca "0 hata, o uyarılar" derleyici mesajını da hedefleyin. Elbette program hatalarla başlatılamaz ama derleyici uyarıları atamız olarak alınmalı: bir uyarı varsa düzeltilmeli. Bu şablon " 0 hata, o uyarılar" ile yapılmıştır - geliştirmenin sonuna kadar bu durumu koruyun.

Mantığı çözdüğümüzde ve derleyiciyi bulduktan sonra geriye sadece fonksiyonlara gerekli mantığı sağlamak kalıyor.

İkinci parametre olan trolün boyutu şimdilik bir sonraki versiyona aktarılacak. Ekstra gerekecek. hesaplamalar. Bu nedenle, bu şablona dahil edilmemiştir. Trol her tik çekecektir.

Vasily, elbette, benim için bu kadar çok iş yaptığınız için çok teşekkür ederim, ancak bu, bu işlevlerin artı operatörlerin nereden geldiğini ve en önemlisi neden ortaya çıktıklarını anlamaya daha fazla yaklaşmadı. Bana önerdiğiniz kodun yazılışına bağımsız olarak ulaşmanız daha doğru olacaktır. Doğru, gerçekten tüm bunlara kendim ulaşmak istedim ve şimdi oraya ulaşmak istiyorum.

Anlıyorum, diğerleri gibi, sürekli olarak tüm kod satırlarını çiğnemekten ve zaman işaretlemekten bıktınız, ancak sorun tam olarak şu ki, algoritmadan, kod yazma. Burada İngilizce dilindeki bilgi eksikliğini de eklemeliyiz çünkü. neredeyse tüm derleyici hata ve uyarı mesajlarını ve diğer İngilizce kelimeleri Google Translate'e kopyalayıp yapıştırmam gerekiyor. Bu arada, birileri bu konuya gönderilen mikro, hatta nano kodları çalıştırmayı denerse, hepsi " 0 hata, 0 uyarı" ile derlemeden geçti.

Şimdi bu fonksiyonların ve operatörlerin neden ortaya çıktığını anlamak, daha doğrusu anlamak için biraz zamana ihtiyacım var. Kısacası - sessiz korku. Evet ve benim kötü bir öğrencim, eğer temel şeyleri anlamıyorsam.

Yavaş düşünmeme hala tahammül ettiğiniz için size ve diğer tüm programcılara teşekkürler. Aynı zamanda, sabrınızın sınırsız olmadığını çok iyi anlıyorum.

Saygılarımla, Vladimir.

Neden: