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

 
Hepinize iyi günler.
Fiyatın en yakın yerel dipten 30 puan yükseldiği her seferde bir dakika grafiğinde bir emir açan basit bir mql4 kodu yazdım. Bir emir açtıktan sonra, emri açmanın fiyatı yerel minimum olur.
 void OnTick ()
{
if (Bid<LoU)
LoU=Bid;
//********************
if (Bid-LoU>= 0.0030 &&Pr!=LoU)
{
OrderSend ( Symbol (),OP_SELL, 0.1 ,Bid, 3 , 0 , 0 , "300" , 0 );
Pr=LoU;
LoU=Bid;
}
}

Kodumda sevmediğim şey..... Neredeyse her tikte çalıştırılması gerektiği gerçeği. Bu kodu geliştirebilirim ve her tikte değil, neredeyse her dakika mumda çalıştırılacaktır. Yani bir sipariş açma noktasını bulmak için programın çok büyük miktarda iş yapması gerekiyor.

SORU

Lütfen bana kodumda belirtilen sipariş açılış noktasını, keneler veya mumlar üzerinde yineleme yapmadan veya mümkün olan minimum numaralandırma ile bulmanızı sağlayacak dil yapısını söyleyin, yani program mümkün olduğunca az zaman harcar. nokta.

Yardım için teşekkürler.

 
ANDREY :
Hepinize iyi günler.
Fiyatın en yakın yerel dipten 30 puan yükseldiği her seferde bir dakika grafiğinde bir emir açan basit bir mql4 kodu yazdım. Bir emir açtıktan sonra, emri açmanın fiyatı yerel minimum olur.

Kodumda sevmediğim şey..... Neredeyse her tikte çalıştırılması gerektiği gerçeği. Bu kodu geliştirebilirim ve her tikte değil, neredeyse her dakika mumda çalıştırılacaktır. Yani bir sipariş açma noktasını bulmak için programın çok büyük miktarda iş yapması gerekiyor.

SORU

Lütfen bana kodumda belirtilen sipariş açılış noktasını, keneler veya mumlar üzerinde yineleme yapmadan veya mümkün olan minimum numaralandırma ile bulmanızı sağlayacak dil yapısını söyleyin, yani program mümkün olduğunca az zaman harcar. nokta.

Yardım için teşekkürler.

 //+------------------------------------------------------------------+
int OnInit ()
  {
   LoU=Bid;
  }
//+------------------------------------------------------------------+
void OnTick ()
  {
   if ((Bid+ 30 * Point )<=LoU)
     {
       if ( OrderSend ( Symbol (),OP_SELL, 0.1 ,Bid, 3 , 0 , 0 , "300" , 0 )) LoU=Bid;
     }
  }
 
MakarFX :

Yardım için teşekkürler.

Ama kodun sonucu benimkiyle uyuşmuyor. 01/04/2010 ile 01/05/2010 arasında bir gün boyunca GBPUSD çifti üzerinde dakika grafiğinde çalışan kodumun sonucu.
İşte kodumun çıktısı

Ve bu, kodunuzun sonucudur

 
ANDREY :

Yardım için teşekkürler.

Ama kodun sonucu benimkiyle uyuşmuyor. 01/04/2010 ile 01/05/2010 arasında bir gün boyunca GBPUSD çifti üzerinde dakika grafiğinde çalışan kodumun sonucu.
İşte kodumun çıktısı

Ve bu, kodunuzun sonucudur

OnInit() kodunu göster

 
MakarFX :

OnInit() kodunu göster

 double LoU;
int OnInit ()
  {
   LoU=Bid;
  }
//+------------------------------------------------------------------+
void OnTick ()
  {
   if ((Bid+ 30 * Point )<=LoU)
     {
     
       if ( OrderSend ( Symbol (),OP_SELL, 0.1 ,Bid, 3 , 0 , 0 , "300" , 0 )) LoU=Bid;
     }
  }

Sizinkini MetaEditor koduna kopyaladım ve yukarıdaki sonucu aldım.

Kodunuz bir sipariş açar ve yukarıdan aşağıya (sarı) ve benimkini aşağıdan yukarıya (mavi) doğru 30 sayfa sayar.

yardım için teşekkürler

 
ANDREY :

Sizinkini MetaEditor koduna kopyaladım ve yukarıdaki sonucu aldım.

yardım için teşekkürler

Sorunun ne olduğunu anlamak için kodunuza ihtiyacım var.

Sizin kodunuzda, fiyat düşerse LoU her vuruşta değişir, ancak benim kodumda, LoU sadece bir ticaret açtıktan sonra değişir.

 
MakarFX :

Sorunun ne olduğunu anlamak için kodunuza ihtiyacım var.

Sizin kodunuzda, fiyat düşerse LoU her vuruşta değişir, ancak benim kodumda, LoU sadece bir ticaret açtıktan sonra değişir.

Yanlış taraftan sayılan 30 puanınız var. Bir önceki mesaja resim ekledim.
Kodum ilk mesajda. Fiyat yerel minimum *aşağıdan yukarıya* göre kişi başı 30'u geçer geçmez bir sipariş açın. Ve kodum siparişleri tam olarak ihtiyacım olduğu gibi açıyor. Ama ona mümkün olduğunca az zaman harcamasını istiyorum.

LoU kodumda her sipariş değişikliğini her onay açtıktan sonra kabul ettim. Ve bu olmadan, program 30 pp'yi saymanız gereken en yakın yerel minimumu bulamaz. kodum onları açar.
 
ANDREY :

Sizinkini MetaEditor koduna kopyaladım ve yukarıdaki sonucu aldım.

Kodunuz bir sipariş açar ve yukarıdan aşağıya (sarı) ve benimkini aşağıdan yukarıya (mavi) doğru 30 sayfa sayar.

yardım için teşekkürler

Benim hatam... değiştir

 double LoU;
int OnInit ()
  {
   LoU=Bid;
  }
//+------------------------------------------------------------------+
void OnTick ()
  {
   if ((Bid- 30 * Point )>=LoU)
     {
     
       if ( OrderSend ( Symbol (),OP_SELL, 0.1 ,Bid, 3 , 0 , 0 , "300" , 0 )) LoU=Bid;
     }
  }
 
MakarFX :

Benim hatam... değiştir

Yardım için teşekkürler.
Değiştirildi. Aralarında ihtiyacım olanların da bulunduğu çok sayıda sipariş (27657 sipariş) açar

İşte ilk siparişlerin bir ekran görüntüsü

 
MakarFX :

Benim hatam... değiştir

İşte değiştirilen satıra sahip kodunuz.

 double LoU;
int OnInit ()
  {
   LoU=Bid;
  }
//+------------------------------------------------------------------+
void OnTick ()
  {
   if ((Bid+ 30 * Point )>=LoU)
     {
     
       if ( OrderSend ( Symbol (),OP_SELL, 0.1 ,Bid, 3 , 0 , 0 , "300" , 0 )) LoU=Bid;
     }
  }
Kodun sadece gerekli siparişleri açması nasıl sağlanır?