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

 
Vladislav Andruschenko :
Geçerli olarak ayarlanmışsa yayılır. Şu anda ayarlanmışsa, test için bitiş tarihi. Daha birçok sebep olabilir.

Yayılma sabit, bitiş tarihi 01.01.18

 
Aidar Kaliaskar :

Yayılma sabit, bitiş tarihi 01.01.18


bir puanın maliyeti.....vb


hafta sonu deneyin.

 

MQL4'te "US.500+" grafiğinde "US.30+" kapanış fiyatlarında bir çizgi çekecek bir gösterge yapmaya çalışıyorum. Genel olarak, iki sembolün fiyat çizgileri bir grafikte görünmelidir. Kodun altında ama çalışmıyor. Günlüklerde, mesaj "özel arabellekteki gösterge henüz desteklenmiyor" şeklindedir. Zihninize neden çalışmadığını öğretin. TEŞEKKÜR.

 #property version    "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots 1
#property indicator_color1 clrRed
#property indicator_style1 STYLE_DOT
#property indicator_type1    DRAW_LINE
//---
input string    symbolName= "US.30+" ; // Symbol name
input double    difference=- 22387.0 ; // Difference from other symbol
//--- price buffer for other symbol
double otherSymbol[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,otherSymbol, INDICATOR_DATA );
//---
   return INIT_SUCCEEDED ;
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int      rates_total,
                 const int      prev_calculated,
                 const int      begin,
                 const double &price[])
  {
//---
   for ( int i=prev_calculated;i<rates_total;i++)
      otherSymbol[i+ 1 ]= iClose (symbolName, PERIOD_CURRENT ,i)+difference;
   ArraySetAsSeries (otherSymbol, true );
//--- return value of prev_calculated for next call
   return (rates_total);
  }
 
Maxim Khrolenko :

MQL4'te "US.500+" grafiğinde "US.30+" kapanış fiyatlarında bir çizgi çekecek bir gösterge yapmaya çalışıyorum. Genel olarak, iki sembolün fiyat çizgileri bir grafikte görünmelidir. Kodun altında ama çalışmıyor. Günlüklerde, mesaj "özel arabellekteki gösterge henüz desteklenmiyor" şeklindedir. Zihninize neden çalışmadığını öğretin. TEŞEKKÜR.

Çünkü aramanın ilk şeklini kullanmanız gerekiyor.
 
Artyom Trishkin :
Çünkü aramanın ilk şeklini kullanmanız gerekiyor.
Değişti ve ... ortaya çıktı! Çok teşekkürler.
 
STARIJ :

Sorunun ne olduğunu buldum - bir döngü için 60 saniyelik geri sayım yapılmalı

Teşekkürler, açıklama için teşekkürler.

60 saniye yerine 300 olacaktır.

Pozisyon açılış süresi farklıdır, pozisyon açılış saatinden itibaren 300 saniye ara ile yazmanız gerekmektedir.

Bu durumda nasıl yapılır?

 
lil_lil : 60 saniye yerine 300 olacaktır. ... pozisyon açılış saatinden itibaren 300 saniye aralıklarla yazmanız gerekir. Bu durumda nasıl yapılır?

Programımı denedin mi? 300'ü pek anlamadım... 60 yerine 300 koyarsanız, öyle mi? Bundan nasıl kazanç elde edeceğimi bana söylersen, daha özenle araştırırım!

 

Bana bir danışmanla söyle, her zaman olduğu gibi, sorun muhtemelen banalda, ama bulmacayı çözmedim

ema'dan ema >smma varsa veya puanlara ulaşmıyorsa satın alma açmalıdır (satışlar için aynı). Barın kapanışında anlaşmayı kapatın-yeni bir tane açın. Bir sonraki de aynı şekilde açılır, ancak bir öncekinin açılış fiyatının daha yüksek olması şartıyla yani last_order_price .

Ama sonuç olarak istediği yerde açılır ve kapanır. (testin başında genellikle açılır ve hemen kapanır)

 #property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict

input int MA_period= 10 ;
input int take= 200 , stop= 200 , Magic= 1104 ;
input double lot= 0.05 ;
input int slippage= 30 ;
input int point= 5 ;
double last_order_price,fast_MA,slow_MA;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   fast_MA= iMA ( Symbol (), PERIOD_CURRENT ,MA_period, 0 , MODE_EMA , PRICE_CLOSE , 0 );
   slow_MA= iMA ( Symbol (), PERIOD_CURRENT ,MA_period, 0 , MODE_SMMA , PRICE_CLOSE , 0 );
 
   if (fast_MA>slow_MA) last_order_price= 0 ;
       else last_order_price= Ask +stop* _Point ;

//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---

   fast_MA= iMA ( Symbol (), PERIOD_CURRENT ,MA_period, 0 , MODE_EMA , PRICE_CLOSE , 0 );
   slow_MA= iMA ( Symbol (), PERIOD_CURRENT ,MA_period, 0 , MODE_SMMA , PRICE_CLOSE , 0 );
   
   if ( Bid <=fast_MA+point* _Point && Bid >=fast_MA && fast_MA>slow_MA && SymOrder() && Bid >last_order_price)
   {
       OrderSend ( Symbol (), OP_BUY ,lot, Ask ,slippage, Ask -stop* _Point , Ask +take* _Point , NULL ,Magic, 0 , clrBlue );
      last_order_price= Bid ;
   }
   
   if ( Bid >=fast_MA-point* _Point && Bid <=fast_MA && fast_MA<slow_MA && SymOrder() && Bid <last_order_price)
   {
       OrderSend ( Symbol (), OP_SELL ,lot, Bid ,slippage, Bid +stop* _Point , Bid -take* _Point , NULL ,Magic, 0 , clrRed );   
      last_order_price= Bid ;
   }
      
   if (!SymOrder() && Volume [ 0 ]< 2 && OrderType ()== OP_BUY )
   {
       OrderClose ( OrderTicket (),lot, Bid ,slippage, clrWhite ); 
      
   }
   if (!SymOrder() && Volume [ 0 ]< 2 && OrderType ()== OP_SELL )
   {
       OrderClose ( OrderTicket (),lot, Ask ,slippage, clrWhite );  

   }     
      
  }
//+------------------------------------------------------------------+
bool SymOrder()
{
   for ( int i= 0 ; i< OrdersTotal (); i++)
      {
         OrderSelect (i, SELECT_BY_POS , MODE_TRADES );
         if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==Magic) return false ;
      }

   return true ;
}
 
Roman Sharanov :

Bana bir danışmanla söyle, her zaman olduğu gibi, sorun muhtemelen banalda, ama bulmacayı çözmedim

ema'dan ema >smma varsa veya puanlara ulaşmıyorsa satın alma açmalıdır (satışlar için aynı). Barın kapanışında anlaşmayı kapatın-yeni bir tane açın. Bir sonraki de aynı şekilde açılır, ancak bir öncekinin açılış fiyatının daha yüksek olması şartıyla yani last_order_price .

Ama sonuç olarak istediği yerde açılır ve kapanır. (testin başında genellikle açılır ve hemen kapanır)

Peki, nasıl söyleyebilirsin? Kodunuzu panoya kaydedin, danışmana yazın, strateji test cihazında çalıştırın? Neyin açılıp kapandığını görüyorum. Ne olmuş? Demoda çalıştırın - bugün Cumartesi, yarın Pazar, piyasa kapalı . Gözlerinden bak? Bu yüzden tüm değişkenlerin değerlerini akılda tutmak gerekir. Eskiden bir kalem ve kağıtla hata ayıklamanın bir yolu vardı - deneyin. Ayrıca tüm OrderSelect ve OrderClose öğelerinin önüne Alert("Bid=", Bid," Fast+P=",Fast_Ema+point*_Point," ....) ayarını yaparak test cihazında 1 gün ayarlayabilirsiniz, örneğin, 19 Şubat'tan 20 Şubat'a kadar ve ardından testten sonra günlüğü açın, bir kopyasını alın, fazladan satırları silin ve analiz edin.MetaEditor'da hata ayıklama da vardır. Nasıl hata ayıklanacağını öğrendiğinizde ... harika olacak.
 

Onun düğmesi nerede?

Lütfen bana #include <Controls\SpinEdit.mqh> (artımlı metin alanı) öğesinden CSpinEdit denetimindeki metni nasıl hizalayacağımı söyleyin.

Varsayılan olarak sola hizalıdır, ancak sağa hizalı olmasını istiyorum.