Uzman Danışmanların uygulanmasının tartışılması. - sayfa 8

 
altec3 :

Tünaydın!

Mevcut gün için karı belirleyen bir fonksiyon yazmaya çalışıyorum:

Lütfen bana işlevde nasıl olduğunu söyle

geçerli günden başlayarak bir dönem belirtin. Dönemin sonunun to_date=TimeCurrent() olduğu açıktır, from_date döneminin başlangıcı tam olarak geçerli günden 00:00:00'dan başlayacak şekilde nasıl doğru bir şekilde belirlenir?

Tatmak için seçin:

 datetime    iTime (
   const string         symbol,           // символ
   ENUM_TIMEFRAMES      timeframe,       // период PERIOD_D1
   int                  shift             // сдвиг
   );
 int    CopyTime (
   string            symbol_name,     // имя символа
   ENUM_TIMEFRAMES   timeframe,       // период PERIOD_D1
   int               start_pos,       // откуда начнем 0
   int               count,           // сколько копируем 1
   datetime          time_array[]     // массив для копирования времени открытия. Объявить заранее

Ya da en çok, en çok. ki zaten önerilmiş.

 
Vladimir Karputov :

Bugün en az bir tik olduğunu varsayarsak, algoritma şu şekildedir: şimdiki zamanı MqlDateTime yapısına gönderiyoruz . Daha sonra bu yapıda saatleri, dakikaları ve saniyeleri sıfırlıyoruz. Düzenlenen yapıyı zamanla dönüştürmek için kalır:


Sonuç:

Teşekkür ederim! Bir işlev eklersem başka bir soru:

 //+------------------------------------------------------------------+
//|Функция возвращает прибыль за текущие сутки                       |
//+------------------------------------------------------------------+
double Day_Profit()
  {
//--Запрашиваем историю сделок за последнии сутки
   HistorySelect ( TimeCurrent ()- PeriodSeconds ( PERIOD_D1 ), TimeCurrent ());
   uint      total       = HistoryDealsTotal ();   // количество сделок в истории
   ulong     ticket      = 0 ;                     // тикет сделки в истории
   long      type        = 0 ;                     // тип сделки
   double    profit      = 0.0 ;                   // финансовый результат сделки
   double    commission  = 0.0 ;                   // коммиссия по сделке
   double    DayProfit   = 0.0 ;                   // прибыль за текущие сутки
//--- for all deals
   for ( uint i= 0 ; i<total; i++)
     {
       if ((ticket= HistoryDealGetTicket (i))> 0 )       //--- если имеются сделки, то...
        {
         profit      = HistoryDealGetDouble (ticket, DEAL_PROFIT );
         commission  = HistoryDealGetDouble (ticket, DEAL_COMMISSION );
         if ( HistoryDealGetInteger (ticket, DEAL_TYPE )!= DEAL_TYPE_BALANCE )
           {
            DayProfit+=(profit+commission);
           }
        }
     }
   return (DayProfit);
  }
//+------------------------------------------------------------------+

Uzman Danışman olarak, işlemlerin analiz edildiği dönem nasıl güncellenecek? Danışmanın birkaç gün çalıştığını varsayalım, o zaman ertesi günün başlangıcı ile süre güncellenecek mi?

Uzman Danışmanda yukarıdaki işlevin uygulanması:

 void OnTick ()
  {
   if (Day_Profit()<ProfitMax)
     {
      ExtExpert. OnTick ();
     }
   return ;
  }
 
altec3 :

Teşekkür ederim! Bir işlev eklersem başka bir soru:

Uzman Danışman olarak, işlemlerin analiz edildiği dönem nasıl güncellenecek? Danışmanın birkaç gün çalıştığını varsayalım, o zaman ertesi günün başlangıcı ile süre güncellenecek mi?

Uzman Danışmanda yukarıdaki işlevin uygulanması:

Saat, günün başlangıcından geçerli saate + gün veya + üç gün olarak ayarlanmalıdır.

Günün başlangıcı nasıl belirlenir - zaten biliyorsunuz.

 

Tünaydın!

Bir enstrüman için sipariş vermeden önce spreadin belirlenmesine ihtiyaç vardır. Standart MQL5 kitaplıkları , CSymbolInfo sınıfını içerir. O zaman bu kontrolü en iyi nasıl uygulayacağımı düşündüm - CSymbolInfo aracılığıyla mı yoksa bir işlev mi kullanacağım? Uzmanlar, bana bunu yapmanın en iyi yolunu söyleyin! Bu konu daha önce gündeme geldiyse, beni doğru yöne gönderirseniz çok minnettar olacağım.

 

Tünaydın!

Biraz tavsiyeye ihtiyacım var. EA farklı zaman dilimlerinden sinyal modülleri içeriyorsa, çubuklar nasıl hesaplanır?

Örneğin, stokastik tabanlı iki sinyal modülü içeren basit bir Uzman Danışman vardır (ana hat 0 ve 1 çubuklarında sinyal hattının üzerindeyken - AL, 0 ve 1 çubuklarında sinyal hattının altında - SAT) - bir H1, diğeri M15'te. Her iki modülün ağırlıkları aynıdır ve Expert Advisor'da bir işlem açmak için eşik değeri, her iki modülün sinyallerinin aynı anda dikkate alınması gerektiği şekilde ayarlanır. EA, H1 zaman çerçevesi ile grafik üzerinde çalışır. H1'deki ekran görüntüsüne bakarsanız, her şey açıktır - son ve sondan bir önceki çubuklarda, ana hat sinyal hattından daha yüksektir, bu yüzden satın alıyoruz. Ancak M15 grafiğinde hangi çubuğun 0, hangisinin 1 olarak kabul edilmesi gerektiğini bulamıyorum. Anlaşma açık, yani M15'te anlaşma koşulunun yerine getirilmesi gerekiyor.

Dosyalar:
H1.png  43 kb
M15.png  21 kb
 
altec3 :

Örneğin, stokastik tabanlı iki sinyal modülü içeren basit bir Uzman Danışman vardır (ana hat 0 ve 1 çubuklarında sinyal hattının üzerindeyken - AL, 0 ve 1 çubuklarında sinyal hattının altında - SAT) - bir H1, diğeri M15'te.

Sıfır çubuğu KÖTÜ! 1 çubukta - kapalı gibi hesaplanan geçmiş üzerindeki göstergeyi görürsünüz (yeniden çizme olasılığını hesaba katmazsanız iyi, basitleştirilmiş). Buna göre, kapalı bir çubuğa dayalı stratejiler oluşturun ve test cihazında, MT4'teki eski TF'den gelen gösterge, kapalı olarak sıfır bir çubuğun bile sonucunu size önceden gösterecektir - yani. gelecekten.
Ve sonuç olarak, hayal kırıklığı: grafikte bir şey, test cihazında başka bir şey, ancak gerçek zamanlı olarak her şey tam tersi.
Sözüme güvenin, bu yüzden sistem hatasının nerede olduğunu bulana kadar hayatımın yarısını kaybettim. Daha yüksek zaman dilimlerinin göstergelerinin çalışmasını daha genç olanda doğru bir şekilde görüntülemek için, özel bir yaklaşıma ihtiyaç vardır, örneğin Masha ile, her şey basittir - periyodu zaman dilimleri ve sıra oranıyla çarparlar, ancak eğer varsa -doğrusal hesaplamalar, o zaman 0 bar'da hesaplamanın yalnızca bir taklidi vardır.
Grafikte kıdemli TF'yi doğru şekilde göstermesi için bir yıl boyunca RSI'yi kırdım.
Israr etmiyorum, en azından mevcut TF ile ilgili olarak özellikle eski olanlardan kapalı çubuklardan gelen sinyalleri kullanmanızı ve ayrıca özellikle özel göstergeler olmak üzere yeniden çizimi kontrol etmenizi öneririm.
 
altec3 :

Tünaydın!

Biraz tavsiyeye ihtiyacım var. EA farklı zaman dilimlerinden sinyal modülleri içeriyorsa, çubuklar nasıl hesaplanır?

Örneğin, stokastik tabanlı iki sinyal modülü içeren basit bir Uzman Danışman vardır (ana hat 0 ve 1 çubuklarında sinyal hattının üzerindeyken - AL, 0 ve 1 çubuklarında sinyal hattının altında - SAT) - bir H1, diğeri M15'te. Her iki modülün ağırlıkları aynıdır ve Expert Advisor'da bir işlem açmak için eşik değeri, her iki modülün sinyallerinin aynı anda dikkate alınması gerektiği şekilde ayarlanır. EA, H1 zaman çerçevesi ile grafik üzerinde çalışır. H1'in ekran görüntüsüne bakarsanız, her şey açıktır - son ve sondan bir önceki çubuklarda, ana hat sinyal hattının üzerindedir, bu yüzden satın alıyoruz. Ancak M15 grafiğinde hangi çubuğun 0, hangisinin 1 olarak kabul edilmesi gerektiğini bulamıyorum. Anlaşma açık, bu da anlaşma koşulunun M15'te de karşılanması gerektiği anlamına geliyor.

Tarihte, zaten kapalı çubuklar görüyorsunuz ve sıfır kötü değil, ancak hareketlidir ve mevcut fiyata bağlı olarak oluştuğu için bunu dikkate almanız gerekir ve fiyat sırasında stokastik yönünde değişiklikler mümkündür. atlar, bu yüzden daha hassastır, örneğin kapanabilir.

Açık 0 && 1 && 2 için başka bir çubuk eklemeyi deneyin. belki giderler küçülür.

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
Neden: