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

 

göstergeyi düzeltmeye yardım et - Son çubuğu bulamıyorum!

gösterge, bahsin her 2 çubukta bir yapılacağı gerçeğini dikkate alarak ikili opsiyonlar için bir dizi sürekli kazanç hesaplar (yani bir - kazandı / kaybettikten sonra mevcut çubuğu beklersiniz), harici değişken analizidir. fiyat artışı veya düşüşü için önceki çubuğun fiyatı

her şey çalışıyor gibi görünüyor, ancak çevrimiçi son çubuk yanlış hesaplanıyor ve sonuç olarak, göstergeyi M1'e koyarsanız, geçmişten gelen veriler doğru bir şekilde hesaplanacak ve çevrimiçi olarak hesaplanan her şey artık doğru değil, kod:

 //+------------------------------------------------------------------+
//|                                                         test.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "IgorM"
#property link        "https://www.mql5.com"
#property version    "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots    1
//--- plot Label1
#property indicator_label1    "Label1"
#property indicator_type1    DRAW_HISTOGRAM
#property indicator_color1    clrRed
#property indicator_style1    STYLE_SOLID
#property indicator_width1    4
#property indicator_level1    2
#property indicator_level2    4
#property indicator_level3    6
//--- input parameters
input bool      on_a_higher= true ;
//--- indicator buffers
double          Label1Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int count;
bool win;
int OnInit ()
  {
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,Label1Buffer, INDICATOR_DATA );
   count = 0 ;
   win = false ;
   
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const int begin,
                 const double &price[])
  {
//---
       int start;
       if (prev_calculated==rates_total) return (rates_total);
       if (prev_calculated== 0 ) start= 1 ; else start=prev_calculated- 1 ;
       for ( int i=start;i<rates_total;i++){
             if (win){   // признак выигрыша на предыдущей ставке
                  win = false ;
                  Label1Buffer[i]=count;
            }
             else {
                   if (on_a_higher){     // on_a_higher = true - расчитываем на рост цены относительно предидущего бара
                     if (price[i]>price[i- 1 ]){
                           count++;
                           win = true ;
                     } else {
                                 count = 0 ;
                                 win = false ;
                     }
                  Label1Buffer[i]=count;
                  } else {               // on_a_higher = false - расчитываем на падение цены относительно предидущего бара
                         if (price[i]<price[i- 1 ]){
                           count++;
                           win = true ;
                     } else {
                                 count = 0 ;
                                 win = false ;
                     }
                  Label1Buffer[i]=count;
                  }
            }
      }
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+

şimdiden teşekkürler!

Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Ошибки, баги, вопросы Ошибка после команды CopyClose...
 
Merhaba! Lütfen pozisyonları kapatmak için sinyal modülüne yardım edin. Neyi yanlış yapıyorum?
Dosyalar:
 
yur4ik :
Merhaba! Lütfen pozisyonları kapatmak için sinyal modülüne yardım edin. Neyi yanlış yapıyorum?

Dosyanız SİNYALLER modülüdür. Expert Advisor sisteminde USER göstergesinin SİNYALLER modülü ile aynı şekilde inşa edilmiştir. Diğer bir deyişle, modülünüz tarafından üretilen sinyallerin bir AĞIRLIĞI vardır ve bu ağırlık sinyali tetiklemek için yeterli olmayabilir.


Davanızda kapatmayı en iyi nasıl yapacağınızı düşünmeniz gerekir. Belki de bu sinyal modülünde yapılmamalıdır.

 
Vladimir Karputov :

Dosyanız SİNYALLER modülüdür. Expert Advisor sisteminde USER göstergesinin SİNYALLER modülü ile aynı şekilde inşa edilmiştir. Diğer bir deyişle, modülünüz tarafından üretilen sinyallerin bir AĞIRLIĞI vardır ve bu ağırlık sinyali tetiklemek için yeterli olmayabilir.


Davanızda kapatmayı en iyi nasıl yapacağınızı düşünmeniz gerekir. Belki de bu sinyal modülünde yapılmamalıdır.

Bir sinyal modülü şeklinde olması arzu edilir, böylece danışman jeneratörü aracılığıyla toplamak mümkün olacaktır. Bu modülün tetiklenmesi gerektiği anda, danışmanın ikinci modülündeki LongCondition() ve ShortCondition() sıfır değerleri döndürüyor - yani ağırlık = 0, doğru mu anladım? Buna göre, bu modülün sinyalinin ağırlığı ağır basmalıdır, ancak çalışmaz. CheckCloseLong() ve CheckCloseShort()'ta Print("-------------"); satırlarını ekledim. ve Print(time_GMT_DST()); modülün normal çalışması sırasında, her bir onay işaretinin alınmasından sonra uygun günlük girişlerinin yapılması gerekir, doğru anladım mı? Hiçbir giriş yapılmaz, CheckCloseLong() ve CheckCloseShort() çağrılmaz. Amaç ne?

Tabii ki beceriksizce açıklıyorum ama yeni öğreniyorum
 
yur4ik :

Bir sinyal modülü şeklinde olması arzu edilir, böylece danışman jeneratörü aracılığıyla toplamak mümkün olacaktır. Bu modülün tetiklenmesi gerektiği anda, danışmanın ikinci modülündeki LongCondition() ve ShortCondition() sıfır değerleri döndürüyor - yani ağırlık = 0, doğru mu anladım? Buna göre, bu modülün sinyalinin ağırlığı ağır basmalıdır, ancak çalışmaz. CheckCloseLong() ve CheckCloseShort()'ta Print("-------------"); satırlarını ekledim. ve Print(time_GMT_DST()); hangi, modülün normal çalışması sırasında, her bir işaret geldiğinde günlükte uygun girişleri yapmalı, doğru anladım mı? Hiçbir giriş yapılmaz, CheckCloseLong() ve CheckCloseShort() çağrılmaz. Amaç ne?

Tabii ki beceriksizce açıklıyorum ama yeni öğreniyorum

Yöntemleri Kullan

   //--- methods of checking if the market models are formed
   virtual int        LongCondition( void );
   virtual int        ShortCondition( void );

CheckCloseLong ve CheckCloseShort yerine.

 
fxsaber :

Teşekkür ederim.

 

Merhaba, bana kaybetme esnafını nasıl karşılayacağımı söyle?
EA, geçmişteki son ticareti analiz eder - eğer kârsızsa, değişkene +1 ekler, bu da art arda kârsız işlemlerin sayısı olacaktır.

Karlı bir ticaret gerçekleşir gerçekleşmez, değişken sıfıra sıfırlanmalıdır.

 
Nikita Chernyshov :

Merhaba, bana kaybetme esnafını nasıl karşılayacağımı söyle?
EA, geçmişteki son ticareti analiz eder - eğer kârsızsa, değişkene +1 ekler, bu da art arda kârsız işlemlerin sayısı olacaktır.

Karlı bir ticaret gerçekleşir gerçekleşmez, değişken sıfıra sıfırlanmalıdır.

İşlem geçmişiyle çalışmayı reddedebilir ve yalnızca OnTradeTransaction() 'da çalışabilirsiniz - orada "OUT" türüyle bir anlaşma yapabilirsiniz - yani bu, pozisyonun kapanması olacaktır. Böyle bir işlem bulunur bulunmaz, kârlı mı yoksa kârsız mı olduğuna karar veririz. Buna göre " kayıp " sayacı sıfırlanır veya arttırılır.

 //+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction ( const MqlTradeTransaction &trans,
                         const MqlTradeRequest &request,
                         const MqlTradeResult &result)
  {
//--- get transaction type as enumeration value 
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
   if (type== TRADE_TRANSACTION_DEAL_ADD )
     {
       long      deal_ticket       = 0 ;
       long      deal_order        = 0 ;
       long      deal_time         = 0 ;
       long      deal_time_msc     = 0 ;
       long      deal_type         =- 1 ;
       long      deal_entry        =- 1 ;
       long      deal_magic        = 0 ;
       long      deal_reason       =- 1 ;
       long      deal_position_id  = 0 ;
       double    deal_volume       = 0.0 ;
       double    deal_price        = 0.0 ;
       double    deal_commission   = 0.0 ;
       double    deal_swap         = 0.0 ;
       double    deal_profit       = 0.0 ;
       string    deal_symbol       = "" ;
       string    deal_comment      = "" ;
       string    deal_external_id  = "" ;
       if ( HistoryDealSelect (trans.deal))
        {
         deal_ticket       = HistoryDealGetInteger (trans.deal, DEAL_TICKET );
         deal_order        = HistoryDealGetInteger (trans.deal, DEAL_ORDER );
         deal_time         = HistoryDealGetInteger (trans.deal, DEAL_TIME );
         deal_time_msc     = HistoryDealGetInteger (trans.deal, DEAL_TIME_MSC );
         deal_type         = HistoryDealGetInteger (trans.deal, DEAL_TYPE );
         deal_entry        = HistoryDealGetInteger (trans.deal, DEAL_ENTRY );
         deal_magic        = HistoryDealGetInteger (trans.deal, DEAL_MAGIC );
         deal_reason       = HistoryDealGetInteger (trans.deal, DEAL_REASON );
         deal_position_id  = HistoryDealGetInteger (trans.deal, DEAL_POSITION_ID );

         deal_volume       = HistoryDealGetDouble (trans.deal, DEAL_VOLUME );
         deal_price        = HistoryDealGetDouble (trans.deal, DEAL_PRICE );
         deal_commission   = HistoryDealGetDouble (trans.deal, DEAL_COMMISSION );
         deal_swap         = HistoryDealGetDouble (trans.deal, DEAL_SWAP );
         deal_profit       = HistoryDealGetDouble (trans.deal, DEAL_PROFIT );

         deal_symbol       = HistoryDealGetString (trans.deal, DEAL_SYMBOL );
         deal_comment      = HistoryDealGetString (trans.deal, DEAL_COMMENT );
         deal_external_id  = HistoryDealGetString (trans.deal, DEAL_EXTERNAL_ID );
        }
       else
         return ;
       if (deal_symbol== Symbol () && deal_magic==m_magic)
         if (deal_entry== DEAL_ENTRY_OUT )
           {
             if (deal_commission+deal_swap+deal_profit> 0 )
              {
               losses= 0 ;
              }
             else
              {
               losses++;
              }
           }
     }
  }
Ve OnInit()'te yapılacak ticaret geçmişini kontrol edin - danışmanın başlangıcında bir kez.
 

Merhaba,

Bilgi görüntülemeden önce uzman günlüğünün programlı olarak nasıl temizleneceğini söyleyebilir misiniz?

Yalnızca Win API aracılığıyla mı?

Teşekkür ederim!

 
Vitaliy Sendyaev :

Merhaba,

Bilgi görüntülemeden önce uzman günlüğünün programlı olarak nasıl temizleneceğini söyleyebilir misiniz?

Yalnızca Win API aracılığıyla mı?

Teşekkür ederim!

Yalnızca Win API aracılığıyla oturum açın.