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

 
Artyom Trishkin # :

İyi. Basit kelimelerle Rusça deneyeceğim.

balığa gidiyorsun.

  1. Evde kileri açtılar, kafalarının arkasını kaşıdılar ve kapattılar.
  2. Balık tutmaya geldim ve bir oltaya ihtiyacın var
  3. Bir olta için kilere eve gidelim
  4. Balık tutmaya geldik, yem attık ve balık tuttuk ve sonra bir ağa ihtiyacınız vardı.
  5. Bir ağ için kilere eve gidelim
  6. Balık tutmaya geldik, bir ağ ile bir kancada yakalanan ve yüzen bir balık tuttuk ve yakalanan balığı katlamak için bir kaba ihtiyacınız vardı.
  7. Hadi eve gidelim..... Devam etmeli miyim?

Ve balık tutmak için ihtiyacınız olan her şeyi kilerden (OnInit) hemen alabilir, etrafta koşmadan balık tutmaya gidebilir ve eve dönerek her şeyi kilere ve buzdolabına (OnDeinit) koyabilirsiniz.

Burada forumda bilgi sahibi olabilirsiniz . Bazen sadece dinlemeniz ve size ne dediklerini duymanız gerekir.

Ve ortaya çıktı, bir soru sordular, bir cevap aldılar, dediler ki - çöp ve sen düşündüğün gibi yap.

İlk önce soruyu düşünmeniz, etrafa sormanız ve ancak o zaman editörü üstlenmeniz gerekir.

Programlamada en kolay şeyin kod yazmak olduğunu biliyor musunuz? Ve aslanın kalkınmadaki payı mantık hakkında düşünmekle meşgul.

Ne saçma bir benzetme. Bu durumda, tüm değişkenler, sınıf nesneleri vb. Gerektiği gibi oluşturmak veya grafik oluşturmak yerine global yapın. nesne başka bir şey mi (kesinlikle olta veya ağ değil :)) ? Bu yüzden yaklaşımım oldukça mantıklı ve haklı, sadece mql veya metatrader işleri berbat ediyor.

 
MakarFX # :
Bu sinyali geçecek

Ya aptalım, ya da hepsi aynı, açık siparişler varsa hiçbir koşul yok Ve bir sinyal var ve bar zaten yeni.

Sinyaller çubuğun bir katından daha uzunsa, çubuğun ilk tikinde çalışacaktır.

Tek soru, bir emrin ne zaman açılacağı, sinyalin göründüğü anda veya bir sonraki çubuğun ilk tikinde.
 
Valeriy Yastremskiy # :

Ya aptalım, ya da hepsi aynı, açık siparişler varsa hiçbir koşul yok Ve bir sinyal var ve bar zaten yeni.

Sinyaller çubuğun bir katından daha uzunsa, çubuğun ilk tikinde çalışacaktır.

Tek soru, bir emrin ne zaman açılacağı, sinyalin göründüğü anda veya bir sonraki çubuğun ilk tikinde.
Soru - barda bir sipariş aç
 
законопослушный гражданин Sleep() ile çözmeyi düşündüm ama Makar süreci durdurmamanın daha iyi olduğunu söyledi.


kod şimdi şöyle görünür:

Açmadan önce bu mum üzerinde açık pozisyon olup olmadığını kontrol edin. Değilse, o zaman açın.

 
законопослушный гражданин # :

Prensip olarak, açık bir emir genellikle zaten açık olan bir çubuğun onay işaretleriyle kapanır. MakarFX ve Artyom doğru bir şekilde fark etti. Bu nedenle, bunu yapmak doğru olacaktır:

 void OnTick ()
  {
   datetime cTime;
   static datetime time = 0 ;
   int nOrders;

  cTime = iTime ( NULL , PERIOD_CURRENT , 0 );

  nOrders = CountOrders();

   if (time != cTime && nOrders == 0 )
    time = cTime;
   else
     return ;

// Получим значение индикатора
   dMA = iMA ( Symbol (), 0 ,PeriodMA, MovingShift, MODE_SMA , PRICE_CLOSE , 0 ); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если нет открытых ордеров, то входим в условие
       if (nOrders == 0 ) // теперь это условие можно убрать
     {
// Если появился сигнал на покупку, то откроем ордер на покупку
       if (bSignalBuy() == true )
         vOrderOpenBuy();

// Если появился сигнал на продажу, то откроем ордер на продажу
       if (bSignalSell() == true )
         vOrderOpenSell();
     }
   }
 
Mihail Matkovskij # :

Prensip olarak, açık bir emir genellikle zaten açık olan bir çubuğun onay işaretleriyle kapanacaktır. MakarFX ve Artyom doğru bir şekilde fark etti. Bu nedenle, bunu yapmak doğru olacaktır:

Artem haklı, öyle olmalı

 //+-----------------------------------------------------------------------------------------------+
void OnTick ()
  {
// Получим значение индикатора
   dMA = iMA ( Symbol (), 0 ,PeriodMA, MovingShift, MODE_SMA , PRICE_CLOSE , 0 ); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если нет открытых ордеров и появился сигнал на покупку, то откроем ордер на покупку
   if (CountOrders()== 0 &&bSignalBuy())
     {
      vOrderOpenBuy();
     }
// Если нет открытых ордеров и появился сигнал на продажу, то откроем ордер на продажу
   if (CountOrders()== 0 &&bSignalSell())
     {
      vOrderOpenSell();
     }
   }
 
MakarFX # :

Artem haklı, öyle olmalı

Burada sonuç aynı olacaktır. Sadece kod daha kafa karıştırıcı. Aynı kodu iki farklı fonksiyonda yazıyorsunuz. Ve daha az okunabilir olacak. Gerçi herkes istediğini ya da beğendiğini yazar...

 

Herkes bir şeyler için ödüllendirildi.

Açık bir pozisyonun açılış süresi vardır. Açılış zamanı mumun zamanı ile karşılaştırılabilir - pozisyonun açılış zamanının mumun içinde olup olmadığını öğrenin (ve bu mevcut mumdur)

Ve neden tüm örneklerde sipariş sayısını sürekli olarak buluyorsunuz? Ve sıfır sipariş varsa, onu açarsınız. Bu, olasılıkları büyük ölçüde sınırlar.

Genel olarak, emir/pozisyon sayısına bağlı olmak yalnızca çok dar bir strateji yönü içindir.

 
Mihail Matkovskij # :

Burada sonuç aynı olacaktır. Sadece kod daha kafa karıştırıcı. Aynı kodu iki farklı fonksiyonda yazıyorsunuz. Ve daha az okunabilir olacak. Gerçi herkes istediğini ya da beğendiğini yazar...

senin kodun

   if (time != cTime && nOrders == 0 )
    time = cTime;

(Bar açıldı ve sipariş yok)

sinyali kontrol etti - sinyal yok

... bir sonraki barı beklemek

Geçen seferkiyle aynı hatayı yaptın

not

Bu

 time = cTime;
bir sipariş açıldıktan sonra yürütülmelidir
 
MakarFX # :

Artem haklı, öyle olmalı

Kodunuzda, bir açık pozisyon ile diğeri karşı sinyalde açılmayacaktır. Yani ilk olarak bir sinyal geldiğinde karşı pozisyon olup olmadığını kontrol etmeniz ve kapatmanız gerekir.

Ancak tekrar ediyorum, tüm bunlar strateji geliştirme olanaklarını büyük ölçüde sınırlandırıyor.

Emirlerin varlığına/yokluğuna bağlı olmaktan uzaklaşmak gerekir (özellikle dörtte - orada hem bekleyen emirler (ki doğru) hem de pozisyonlar (doğru olmayan) emir olarak alınır).

Hayır, türlerine göre emir ve pozisyon sayısının elinizin altında olması doğru ve gereklidir. Ancak herhangi bir emrin yokluğunda sadece sinyallere güvenmek böyle bir şey ...

Genel olarak, emir ve pozisyon sayma fonksiyonlarına (emir ve pozisyon sayısı değiştiğinde yapıyı dolduran bir fonksiyon), pozisyon açma/kapama fonksiyonlarına, emir verme fonksiyonlarına ve sinyal fonksiyonlarına sahip olmak doğrudur. Çeşitli trollerin işlevleri ve göstergelerden veri alma. Artı - pozisyon verilerini (açık veya kapalı) herhangi bir değerle karşılaştırabilmek.

Bu setten herhangi bir strateji yapabilirsiniz.

Neden: