Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1426

 
vitaliy zamkovoy Mevcut fiyattan yirmi saniye önceki fiyatı çıkarırsak ve bunu bir emrin sonraki açılışı için belirli bir sabitle karşılaştırırsak, bu Uzman Danışmana nasıl yazılabilir?

Şu koda bak:

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"

//ВХОДНОЙ ПАРАМЕТР
input ushort Constanta=50; //Константа

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetTimer(20);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   double open_0=iOpen(_Symbol,PERIOD_CURRENT,0);
   if(open_0-SymbolInfoDouble(_Symbol,SYMBOL_BID)>Constanta*_Point)
      Print("Цена прошла вниз расстояние больше чем Константа, поэтому нужно открыть позицию SELL!");
   if(SymbolInfoDouble(_Symbol,SYMBOL_BID)-open_0>Constanta*_Point)
      Print("Цена прошла вверх расстояние больше чем Константа, поэтому нужно открыть позицию BUY!");
   Sleep(20000);
   if(open_0-SymbolInfoDouble(_Symbol,SYMBOL_BID)>Constanta*_Point)
      Print("Цена прошла вниз расстояние больше чем Константа, поэтому нужно открыть позицию SELL!");
   if(SymbolInfoDouble(_Symbol,SYMBOL_BID)-open_0>Constanta*_Point)
      Print("Цена прошла вверх расстояние больше чем Константа, поэтому нужно открыть позицию BUY!");
   Sleep(20000);
   if(open_0-SymbolInfoDouble(_Symbol,SYMBOL_BID)>Constanta*_Point)
      Print("Цена прошла вниз расстояние больше чем Константа, поэтому нужно открыть позицию SELL!");
   if(SymbolInfoDouble(_Symbol,SYMBOL_BID)-open_0>Constanta*_Point)
      Print("Цена прошла вверх расстояние больше чем Константа, поэтому нужно открыть позицию BUY!");
   Sleep(20000);
  }
//+------------------------------------------------------------------+
Saygılarımla, Vladimir.
 
MrBrooklin #:

Bu koda bakın:

Saygılarımla, Vladimir.
Ne yazık ki önümüzdeki iki gün kontrol edemeyeceğim, ama lütfen teşekkürlerimi kabul edin!
 
vitaliy zamkovoy #:
Ne yazık ki, önümüzdeki iki gün boyunca kontrol edemeyeceğim, ancak lütfen teşekkürlerimi kabul edin!

Teşekkür ederim, ancak lütfen bunun hazır bir kod olmadığını, sadece düşüncemin yönü olduğunu unutmayın. Yanlış olabilir. Kontrol etmeniz gerekiyor. Başka bir seçenek düşünebilirsiniz - OnTimer'ı kaldırın ve aynı kodu OnTick() içinde deneyin. Kısacası, deneyin.

Saygılarımla, Vladimir.

 
vitaliy zamkovoy Mevcut fiyattan yirmi saniye önceki fiyatı çıkarırsak ve bunu bir emrin daha sonra açılmasıyla bir sabitle karşılaştırırsak - bunu nasıl kaydederiz?

Mevcut fiyatı ve zamanı kaydedin. Her tikte zamanı mevcut zamanla karşılaştırın, 20 saniyeden fazlaysa ikinci fiyatı hatırlayın. İlk fiyat ile ikinci fiyat arasındaki farkı hesaplayın. Elde edilen sonucu bir sabit ile karşılaştırın ve bir emir açmaya karar verin.

 
Valeriy Yastremskiy #:

Mevcut fiyatı ve zamanı hatırlayın. Her tikte zamanı geçerli zamanla karşılaştırın, 20 saniyeden fazla ise ikinci fiyatı hatırlayın. İlk fiyat ile ikinci fiyat arasındaki farkı hesaplayın. Elde edilen sonucu bir sabit ile karşılaştırın ve bir emir açmaya karar verin.

Sizi doğru anlıyor muyum: bu serinin her değeri 20 saniye boyunca kaldırıldığında mevcut fiyatla karşılaştırmak için her saniye mevcut fiyatı hatırlamanız mı gerekiyor?

Karşılaştırma sürekli olmalıdır.

 
vitaliy zamkovoy #:

Sizi doğru anlıyor muyum: her saniye mevcut fiyatı hatırlamanız gerekiyor, böylece bu serinin her değeri 20 saniye boyunca silindiğinde, mevcut olanla karşılaştırabilirsiniz?

Karşılaştırma sürekli olmalıdır.

keneler eşit gitmez, soru algoritmadadır, o zaman tüm keneleri kontrol etmek gerekiyorsa, tüm keneler ezberlenmeli ve karşılaştırılmalıdır. Algoritmaya göre daha az sıklıkta mümkünse, o zaman bir zamanlayıcı ve bir saniye sonra fiyatı hatırlayın ve 20 saniye sonra da hatırlayın ve karşılaştırın. Daha doğrusu 20 saniye içinde bir saniyedeki tüm fiyatları veya fiyatları hatırlamalı ve yeni bir tik ile karşılaştırmalısınız.
Saniyede 1 tik olabilir, 5 saniyede bir olabilir ve bir saniyede 100 olabilir. Her 5 saniyede bir tik olduğunda ve saniyede 100 tik olduğunda nasıl hareket edeceğinize karar vermelisiniz.

 
Valeriy Yastremskiy #:

keneler tek tip değildir, soru algoritmadadır, o zaman tüm keneleri kontrol etmeniz gerekiyorsa, tüm keneler ezberlenmeli ve karşılaştırılmalıdır. Algoritmaya göre daha az sıklıkta olmak mümkünse, o zaman bir zamanlayıcı ve bir saniye sonra fiyatı hatırlayın ve 20 saniye sonra da hatırlayın ve karşılaştırın. Daha doğrusu 20 saniye içinde bir saniyedeki tüm fiyatları veya fiyatları hatırlamalı ve yeni bir tik ile karşılaştırmalısınız.
Saniyede 1 tik olabilir, 5 saniyede bir olabilir ve bir saniyede 100 olabilir. Her 5 saniyede bir tik olduğunda ve saniyede 100 tik olduğunda nasıl hareket edeceğinize karar vermelisiniz.

Bu bir seçenek seçme meselesi değil.... benim için bunu yazmanın zorluğu meselesi. Bugün ilk kez buradayım. Tamamen amatörüm.

Sadece fikrimi denemek istiyorum...

 
vitaliy zamkovoy #:

Bu bir seçenek seçme meselesi değil..... benim için bunu yazmanın zorluğu meselesi. Bugün buraya ilk kez geliyorum. Tamamen amatörüm.

Sadece fikrimi denemek istiyorum.

Algoritma kesin olmalı ve uygulama koşullarını anlamalıdır. Başka bir şekilde kod yazamazsınız. Kod, bir eylem algoritmasının gerçekleştirilmesidir, yanlış olamaz.

Ve burada önce kendiniz yazmak daha iyidir ve belki de hataları düzeltirsiniz.

Eşittir işaretlerini anlıyorsunuz, daha fazlası daha azdır.

 

Halka tampon:

Bir tampon alın - "fiyat, zaman" yapılarından oluşan yeterince büyük bir statik dizi (veya iki ayrı dizi).

İki değişken alırız - tamponun başına ve kuyruğuna "işaretçiler" (indeksler).

Her tikte başa bir eleman ekleriz ve işaretçiyi ilerletiriz.

Zamanı kuyruktaki elemanla karşılaştırın, gerekirse işaretçiyi hareket ettirin.

Fiyatı kuyruktaki elemanla karşılaştırın.

Bir işaretçi dizinin sonuna ulaştıysa, bu işaretçiyi sıfırlarız.

 
JRandomTrader oluşan yeterince büyük bir statik dizi (veya iki ayrı dizi).

İki değişken alın - tamponun başına ve kuyruğuna "işaretçiler" (indeksler).

Her tik işaretinde başa bir öğe ekliyoruz ve işaretçiyi hareket ettiriyoruz.

Gerekirse zamanı kuyruktaki elemanla karşılaştırın - işaretçiyi hareket ettirin.

Fiyatı kuyruktaki eleman ile karşılaştırın.

Bir işaretçi dizinin sonuna ulaşmışsa - bu işaretçiyi sıfıra sıfırlayın.

👍