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

 
TheXpert :
Terminalde "sipariş kapatma" olayı yoktur. Yani sadece bir senaryo veya danışman. Yukarıda gösterildiği gibi.

Hmm. Etkinliğin adı nedir - "çapraz" a bastığınızda - açık bir siparişi kapatıyor musunuz?

bu eylem ve sesi "atamanız" gerekir

 
paladin800 :

Çok teşekkürler!

Ben de hatamı buldum. Gerçek şu ki, "Buy_close" koşulu programa bir anlaşma yapmasını söyler ve bir pozisyonun varlığının kontrolü "Buy_opened" olur.

Anlaşma kapanır ve "Buy_close" koşulları eşleşir, dolayısıyla bir hata oluşur.

Ben şartı şu şekilde yaptım:

 if (Buy_close && Buy_opened== true )
 
trora :

sesi "atamanız" gereken bu eylemdir

İyi şanslar :)
 

-%0.30 ofset ile MA çizgileri çizmek mümkün değildir.

Kaymanın meydana geleceği hareketli ortalamayı çağırmada herhangi bir sorun yoktur. Ancak ofset çizgilerini almak mümkün değildir.  

Ana kod:

 #property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots    2
#property indicator_type1   DRAW_LINE
#property indicator_color1   clrMediumVioletRed
#property indicator_style1   STYLE_SOLID
#property indicator_label1   ""
#property indicator_type2   DRAW_LINE
#property indicator_color2   clrRed
#property indicator_style2   STYLE_SOLID
#property indicator_label2   "Sell TP
input int Period_ = 34 ;         //Период
int ma1Handle;
double ma1Val[]; 
double ExtMapBuffer1[];
double ExtMapBuffer2[]
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {   
SetIndexBuffer ( 0 ,ExtMapBuffer1, INDICATOR_DATA );
SetIndexBuffer ( 1 ,ExtMapBuffer2, INDICATOR_DATA )
ma1Handle= iMA ( _Symbol , _Period ,Period_, 0 , MODE_EMA , PRICE_CLOSE ); 
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
CopyBuffer (ma1Handle, 0 , 0 , 2 ,ma1Val);
ArraySetAsSeries (ma1Val, true );
int bars= Bars ( _Symbol , _Period );
for ( int i= 0 ;i<bars;i++)
{
ExtMapBuffer2[i]=ma1Val[ 0 ] - ((ma1Val[ 0 ]/ 100 )* 0.3 ); //ЗДЕСЬ НЕ ПОЛУЧАЕТСЯ ПОЛУЧИТЬ ЛИНИЮ
}
//---   
//--- return value of prev_calculated for next call
   return (rates_total);
  }
 
#property indicator_label2  "Sell TP
İkinci alıntı nerede?
 
CopyBuffer (ma1Handle, 0 , 0 , 2 ,ma1Val);
Bu satır bir döngü içinde olmalı ve dizine eklenmelidir.
 
sandex :
Bu satır bir döngü içinde olmalı ve dizine eklenmelidir.

Bir dize nasıl indekslenir? yapmaya çalışıyorum hata veriyor

 ArraySetAsSeries (ma1Val, true );
int bars= Bars ( _Symbol , _Period );
for ( int i= 0 ;i<bars;i++)
    {
     CopyBuffer (ma1Handle, 0 , 0 , 2 ,ma1Val[i]);
    ExtMapBuffer2[i]=ma1Val[i] - ((ma1Val[i]/ 100 )* 0.3 ); //ЗДЕСЬ НЕ ПОЛУЧАЕТСЯ ПОЛУЧИТЬ ЛИНИЮ
    }
 

Şu şekilde indekslemeniz gerekiyor:

 CopyBuffer (ma1Handle, 0 ,i, 1 ,ma1Val);
 

Bu satır şöyle görünmelidir:

ExtMapBuffer2[i]=ma1Val[ 0 ] - ((ma1Val[ 0 ]/ 100 )* 0.3 );
 

Bir dizi, 1 boyutunda statik olarak bildirilir:

 double ma1Val[ 1 ];