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

 
Aleksandr Kononov # :
Peki, hafızayı nasıl kontrol edebilirsiniz? Nasıl harcanır veya başka bir şey?

Diyelim ki hafızayı etkileyebilirsiniz ve 200 gösterge hesaplayacak ama bir hafta içinde 1000 göstergenin neden yüklenmediğini soracaksınız..vs ... kapalı bir döngü .. Doğru görevleri ayarlayın ..

 
Nikolay Ivanov # :

asılı kod hiçbir yere uygulanamaz.. Görevler yapılabilir hale getirilmelidir.. Ve kodu bozmak daha kolaydır.. Göstergeler hızlı çalışmalıdır. Çok uzun hesaplamalar için zaman yoktur.

Bir şeyler yaratabileceğiniz bu çerçeveleri de bilmek isterim. Yeni başlayanlar için bununla başa çıkmak zor, özellikle de programcı olmadığım için. Tamam, okuyacak bir şeyler ararım.

 
Aleksandr Kononov # :

Bir şeyler yaratabileceğiniz bu çerçeveleri de bilmek isterim. Yeni başlayanlar için bununla başa çıkmak zor, özellikle de programcı olmadığım için. Tamam, okuyacak bir şeyler ararım.

iyi, genellikle bir CCİ yeterlidir, maksimum 3 :) ve 200'ünüz var .. Ötesine geçmemenin zor olduğu - burada katılıyorum .. bunun için deneyime ihtiyacınız var, doğru, yapılabilir görev başarıyla tamamlanacak makul bir sürede zordur. Bu nedenle, nereye kazacağınız konusunda tavsiyeye ihtiyacınız varsa, o zaman kesinlikle fikirleri optimize etme ve en aza indirme yönünde.. Örneğin, 20 periyodu olan CCI ve 21 periyodu olan CCI.. hemen hemen aynı ve hiçbir anlamı yok. ikisini de hesaplarken süre ne kadar uzun olursa, etki o kadar küçük olur, makul bir miktar bulmanız gerekir. Güzel bir çözüm her zaman hızlı çalışır.

 
Nikolay Ivanov # :

iyi, genellikle bir CCİ yeterlidir, maksimum 3 :) ve 200'ünüz var .. Ötesine geçmemenin zor olduğu - burada katılıyorum .. bunun için deneyime ihtiyacınız var, doğru, yapılabilir görev başarıyla tamamlanacak makul bir sürede zordur. Bu nedenle, nereye kazacağınız konusunda tavsiyeye ihtiyacınız varsa, o zaman kesinlikle fikirleri optimize etme ve en aza indirme yönünde.. Örneğin, 20 periyodu olan CCI ve 21 periyodu olan CCI.. hemen hemen aynı ve hiçbir anlamı yok. ikisini de hesaplarken süre ne kadar uzun olursa, etki o kadar küçük olur, makul bir miktar bulmanız gerekir. Güzel bir çözüm her zaman hızlı çalışır.

Profil oluşturucunun bellek tüketimini ölçmeye yardımcı olacağını anlıyorum. Öyleyse optimize edelim. Ama yine de, eğer birisi bu konuda nerede okuyacağını biliyorsa, lütfen bağlantıyı atın..

 

Herkese merhaba!

lütfen bana koda neyin eklenmesi gerektiğini söyleyin, böylece MA sadece öne (pozitif değer) değil, aynı zamanda geriye (negatif değer) de kaydırılır

İşte danışmandan gelen kod:

 // Параметры советника
input string   sParametersEA = "" ;     // Параметры советника
input double   Lot           = 0.01 ;   // Количество лотов
input int      StopLoss      = 30 ;     // Стоп (SL)
input int      TakeProfit    = 30 ;     // Тейк (TP)
input int      Slippage      = 3 ;       // Проскальзование (в пунктах)
input int      Magic         = 1 ;       // Индентификатор советника
input double   K_Martin1     = 0.01 ;     // Множитель мартин 1
input double   K_Martin2     = 1.9 ;     // Множитель мартин 2
input double   K_Martin3     = 1.4 ;     // Множитель мартин 3
input int      OrdersClose   = 3 ;       // Ограничение лотности мартин1
input int      OrdersClose2  = 5 ;       // Ограничение лотности мартин2
input int      DigitsLot     = 2 ;       // Точность лотности
// Параметры индикатора
input string   sParametersMA = "" ;     // Параметры индикатора
input int      PeriodMA      = 14 ;     // Период мувинга
input int      MovingShift   = 1 ;       // Сдвиг мувинга
// Глобальные переменные
datetime Start,newbar;
double dMA;
double MaxMartinLot;
double MaxMartinLot2;
//+-----------------------------------------------------------------------------------------------+
int OnInit ()
  {
Start          = TimeCurrent ();
MaxMartinLot   = Lot* MathPow ( 1.4 ,OrdersClose);
MaxMartinLot2  = Lot* MathPow (K_Martin2,OrdersClose2);
int Y          = 15 ;
DrawLABEL( "nextlot" , 1 , 5 ,Y, clrLime , "" ); 
Y += 20 ;
DrawLABEL( "currentlot" , 1 , 5 ,Y, clrLime , "" );
Y += 30 ;
return ( INIT_SUCCEEDED );
  }
//+-----------------------------------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {

  }
//+-----------------------------------------------------------------------------------------------+
void OnTick ()
  {
// Получим значение индикатора
   dMA = iMA ( Symbol (), 0 ,PeriodMA, MovingShift, MODE_SMA , PRICE_CLOSE , 0 ); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если нет открытых ордеров, то входим в условие
       if (CountOrders()== 0 )
     {
// Если появился сигнал на покупку, то откроем ордер на покупку
       if (bSignalBuy() == true )
         vOrderOpenBuy();

// Если появился сигнал на продажу, то откроем ордер на продажу
       if (bSignalSell() == true )
         vOrderOpenSell();
     }
// Пишем какой лот текущий и какой следующий
      DrawLABEL( "nextlot" , 1 , 5 , 0 ,Color1(), StringConcatenate ( "CURRENT LOT: " ,DoubleToStr(LOT(), 2 )));
      DrawLABEL( "currentlot" , 1 , 5 , 0 ,Color2(), StringConcatenate ( "NEXT LOT: " ,DoubleToStr(LOT(), 2 ))); 
 
   }
 
законопослушный гражданин # :

Herkese merhaba!

lütfen bana koda neyin eklenmesi gerektiğini söyleyin, böylece MA sadece öne (pozitif değer) değil, aynı zamanda geriye (negatif değer) de kaydırılır

İşte danışmandan gelen kod:

Kaydırmaya istediğiniz negatif değeri ekleyin, ancak değer + shift sıfırdan küçük olmayacak şekilde.

 
ALEKSANDR SOKOLOV # :

Kaydırmaya istediğiniz negatif değeri ekleyin, ancak değer + shift sıfırdan küçük olmayacak şekilde.

teşekkürler, deneyeceğim.

 

Tünaydın.

Kodla ilgili yardım, belki örnekler vardır.
Görev:

Farklı yönlerde, farklı lotlara sahip birkaç açık sipariş vardır. Bir tanesi kârlı yuva yapıyor, diyelim 20. Ama eksi kârlı açık bir tane var, diyelim ki 0,05 lot ile -55. Düşüşü azaltmak için pozitif olarak kapatılan siparişin kâr miktarı için negatif siparişin bir kısmını kapatmak istiyorum.

while ifadesini temel alarak yazmaya çalıştım, ancak bir şeyler ters gitti.

Şimdiden teşekkürler.

 

Merhaba, bu kod Fedoseev'in kitabından. Gösterge neden pencerede çizilmiyor, günlükte çalışıyor diyor, derlerken hata yok, ek bir pencere açılıyor (boş), bu kitaptaki kod, benimkiyle sonuç tam olarak bu aynı. Sorun nedir?

//+------------------------------------------- --------------------+

//| 015 Sembol.mq5 |

//+------------------------------------------- --------------------+

# mülkiyet telif hakkı "Dmitry Fedoseev"

#özellik bağlantısı "mailto:for-good-letter@yandex.ru"

#özellik sürümü "1.00"

#özellik göstergesi_separate_window

#özellik göstergesi_tamponları 4

#property Indicator_plots 1

//--- çizim çubuğu

#özellik göstergesi_etiket1 "çubuk"

#özellik göstergesi_type1 DRAW_CANDLES

#özellik göstergesi_renk1 clrGray,clrBlue,clrRed

#özellik göstergesi_style1 STYLE_SOLID

#özellik göstergesi_width1 1

//--- giriş parametreleri


girdi stringsymbol="";

giriş bool drawBars=false;


dize sembolü;


//--- gösterge arabellekleri

çift çubukTampon1[];

çift çubukBuffer2[];

çift çubukBuffer3[];

çift çubukBuffer4[];

//+------------------------------------------- --------------------+

//| özel gösterge başlatma işlevi |

//+------------------------------------------- --------------------+

int OnInit()

{

sembol=sembol;

StringTrimLeft(sym);

StringTrimRight(sym);

if(sym==""){

sym=Sembol();

}

if(!SymbolSelect(sym,true)){

Alert("Bilinmeyen sembol",sym);

dönüş(INIT_FAILED);

}

if(çekme çubukları){

PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_BARS);

}

başka{

PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_CANDLES);

}

//--- gösterge arabellek eşlemesi

SetIndexBuffer(0,barBuffer1,INDICATOR_DATA);

SetIndexBuffer(1,barBuffer2,INDICATOR_DATA);

SetIndexBuffer(2,barBuffer3,INDICATOR_DATA);

SetIndexBuffer(3,barBuffer4,INDICATOR_DATA);

//---

dönüş(INIT_SUCCESSED);

}


geçersiz OnDeinit(const int r){

Yorum("");

EventKillTimer();

}

//+------------------------------------------- --------------------+

//| özel gösterge yineleme işlevi |

//+------------------------------------------- --------------------+

int OnCalculate(const int oranları_toplam,

const int önceki_hesaplanmış,

const tarihsaat &saat[],

const double &aç[],

const çift &yüksek[],

const çift &düşük[],

const double &kapat[],

const uzun &tick_volume[],

const uzun &hacim[],

const int &spread[])

{

int barlar=Barlar(sym,Period());

if(çubuklar==0){

Comment("Zaman çerçevesinin oluşumu",sym,"...");

EventSetTimer(1);

dönüş(0);

}

int başlangıç;

if(prev_calculated==0){

Yorum("");

EventKillTimer();

tarihsaat tm[1];

if(CopyTime(sym,Period(),bars-1,1,tm)==-1){

dönüş(0);

}

başlangıç=0;

for(;start<rates_total;start++){

if(zaman[başlangıç]>=tm[0]){

kırmak;

}

}

}

başka{

start=prev_hesaplanmış-1;

}

MqlRates r[1];

for(int i=start;i<rates_total;i++){

if(CopyRates(sym,Period(),time[i],1,r)==-1){

dönüş(0);

}

barBuffer1[i]=r[0].open;

barBuffer2[i]=r[0].yüksek;

barBuffer3[i]=r[0].düşük;

barBuffer4[i]=r[0].close;

}

dönüş(oranlar_toplam);

}


geçersiz OnTimer()

{

ChartSetSymbolPeriod(0,Symbol(),Period());

}


//+------------------------------------------- --------------------+

Dosyalar:
 
MatveySt # :

Merhaba, bu kod Fedoseev'in kitabından. Gösterge neden pencerede çizilmiyor, günlükte çalışıyor diyor, derlerken hata yok, ek bir pencere açılıyor (boş), bu kitaptaki kod, benimkiyle sonuç tam olarak bu aynı. Sorun nedir?


Alt es kodu yapıştırın.

Ve hindi fırlatırken bir enstrüman tanıtıyor musunuz?