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

 

@Artyom Trishkin @Konstantin Nikitin

Söyleyin bana, void NOTIFICATION () işlevini int start yoluyla yoklamak doğru mu? Sürekli bir döngü var! Belki de bu mantığı hemen başlatmak daha mantıklıdır? Çöp atmamak ve yüklememek için! Ve aslında onu, kendim okumak daha keyifli olacak şekilde yazdım!

 
Rewerpool :

@Artyom Trishkin @Konstantin Nikitin

Söyleyin bana, void NOTIFICATION () işlevini int start yoluyla yoklamak doğru mu? Sürekli bir döngü var! Belki de bu mantığı hemen başlatmak daha mantıklıdır?

OnTick()'i kullanın. Her şey gerekli mantığa bağlıdır.
 
Lütfen bunu nereye koyacağımı söyler misin? //+------------------------------------------- --------------------+
 //|  Проверяет объем ордера на корректность                          |
//+------------------------------------------------------------------+
bool CheckVolumeValue( double volume, string & description )
  {
//--- минимально допустимый объем для торговых операций
   double min_volume= SymbolInfoDouble ( Symbol (), SYMBOL_VOLUME_MIN );
   if (volume<min_volume)
     {
       description = StringFormat ( "Объем меньше минимально допустимого SYMBOL_VOLUME_MIN=%.2f" ,min_volume);
       return ( false );
     }

//--- максимально допустимый объем для торговых операций
   double max_volume= SymbolInfoDouble ( Symbol (), SYMBOL_VOLUME_MAX );
   if (volume>max_volume)
     {
       description = StringFormat ( "Объем больше максимально допустимого SYMBOL_VOLUME_MAX=%.2f" ,max_volume);
       return ( false );
     }

//--- получим минимальную градацию объема
   double volume_step= SymbolInfoDouble ( Symbol (), SYMBOL_VOLUME_STEP );

   int ratio=( int ) MathRound (volume/volume_step);
   if ( MathAbs (ratio*volume_step-volume)> 0.0000001 )
     {
       description = StringFormat ( "Объем не является кратным минимальной градации SYMBOL_VOLUME_STEP=%.2f, ближайший корректный объем %.2f" ,
                               volume_step,ratio*volume_step);
       return ( false );
     }
   description = "Корректное значение объема" ;
   return ( true );
  }
 

danışman kodu


enum t
{
e=1, // Parabolik gösterge ile
};
numaralandırma tf
{
af=0, // akım
bf=1, // 1 dakika
cf=2, // 5 dakika
df=3, // 15 dakika
ef=4, // 30 dakika
ff=5, // 1 saat
gf=6, // 4 saat
hf=7, // 1 gün
};

harici int Sihir = 123654789;
dış int kayma = 0;
giriş çift Lot = 1;
harici int rsi_period = 14;
harici int rsi_high = 50;
int rsi_price = PRICE_CLOSE;
harici int rsi_low = 50;
int kayıp_durdur = 5000;
harici int kar_kazanç = 5000;
çift sar_step = 0.03;
çift sar_max = 0.03;

int GenelNoLoss = yanlış; // başabaş noktasından iz
int parametreler_izleme = e; // trol yöntemi
int StartTrall = -5000; // puan olarak minimum takip eden kar
int StepTrall = 1; // kaybı durdur hareket adımı
giriş tf TF_Tralling = af; // gösterge zaman aralığı (0-geçerli)
harici int delta = 50; // hesaplanan kayıp durdurma seviyesinden ofset

çift Adım = 0.03; //Parabolik Adım (yöntem 4)
çift Maksimum = 0.03; //Parabolik Maksimum (yöntem 4)


color text_color = Kireç; // bilgi çıktı rengi

çift ma, rsi, sar_1, sar_2, ma_1, ma_2, ma_3, ma_4, ma_5, ma_6;
tarihsaat LastBuyTime, LastSellTime;

int STOPLEVEL;
int TF[10]={0,1,5,15,30,60,240,1440,10080,43200};
çift SLB=0,SLS=0;


int OnInit()

{
//---

//---
dönüş(0);
}

geçersiz OnTick(){
STOPLEVEL=(int)MarketInfo(Symbol(),MODE_STOPLEVEL);

int b=0,s=0;
double OOP,price_b=0,price_s=0,lot=0,NLb=0,NLs=0,LS=0,LB=0;
int ipucu, Bilet;
bool hatası;
çift SL,OSL;
intn=0;
eğer (b==0) SLB=0;
if (s==0) SLS=0;
for (int i=OrdersTotal(); i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS)==true)
{
ipucu = OrderType();
if (tip<2 && (OrderSymbol()==Symbol()) && (OrderMagicNumber()==Magic ))
{
OSL = OrderStopLoss();
OOP = OrderOpenPrice();
Bilet = OrderTicket();
n++;
if (ipucu==OP_BUY)
{
if(GenelKayıp Yok)
{
SL = SlLastBar(OP_SATIN AL,Teklif,NLb);
(SL < NLb+StartTrall*Point) devam ederse;
}
başka
{
SL = SlLastBar(OP_SATIN AL,Teklif,OOP);
(SL < OOP+StartTrall*Point) devam ederse;
}
//if (OSL >= OOP && only_NoLoss) devam ediyor;
if (SL >= OSL + StepTrall*Nokta && (Bid-SL)/Puan>STOPLEVEL)
{
error=OrderModify(Ticket,OOP,SL,OrderTakeProfit(),0,Beyaz);
if (!error) Comment("TrailingStop Hatası",GetLastError()," order ",Ticket," SL ",SL);
else Comment("TrailingStop ",Ticket," ",TimeToStr(TimeCurrent(),TIME_MINUTES));
}
}
if (ipucu==OP_SELL)
{
if(GenelKayıp Yok)
{
SL = SlLastBar(OP_SELL,Sor,NLs);
(SL > NLs-StartTrall*Point) devam ederse;
}
başka
{
SL = SlLastBar(OP_SELL,Sor,OOP);
(SL > OOP-StartTrall*Point) devam ederse;
}
//if (OSL <= OOP && sadece_NoLoss) devam ediyor;
if ((SL <= OSL-StepTrall*Nokta || OSL==0) && (SL-Ask)/Nokta>STOPLEVEL)
{
error=OrderModify(Ticket,OOP,SL,OrderTakeProfit(),0,Beyaz);
if (!error) Comment("TrailingStop Hatası",GetLastError()," order ",Ticket," SL ",SL);
else Comment("TrailingStop ",Ticket," ",TimeToStr(TimeCurrent(),TIME_MINUTES));
}
}
}
}
}
ma = iMA(Sembol(), 0, 70, 0, MODE_SMA, PRICE_CLOSE, 1);
rsi = iRSI(Symbol(), 0, rsi_period, rsi_price, 1);
sar_1 = iSAR(Symbol(), 0, sar_step, sar_max, 1);
sar_2 = iSAR(Symbol(), 0, sar_step, sar_max, 2);


eğer ((hhhhhhhh))
{
LastBuyTime = Zaman[0];
if(OrderSend(Symbol(), OP_BUY, Lot, NormalizeDouble(Ask,Digits), Slippage, Ask - loss_stop*Point, Ask + take_profit*Point, "Order", Magic, 0, clrGreen) > 0){
Print("Sipariş gönderildi!");
dönüş;
}else Print("Sipariş Hatası");
}
eğer ((hhhhhhhhhhhhhhh))
{
LastSellTime = Zaman[0];
if(OrderSend(Symbol(), OP_SELL, Lot, NormalizeDouble(Bid, Digits), Slippage, Bid + loss_stop*Point, Bid - take_profit*Point, "Order", Magic, 0, clrRed) > 0)
{
Print("Satış emri gönderildi!");
dönüş;
}else Print("Satış Emri Hatası");
}
}

//------------------------------------------------ --------------------
double SlLastBar(int ipucu, çift fiyat, çift OOP)
{
doubleprc=0;
switch(parameters_trailing)
{
durum 1: // Parabolik gösterge ile
prc = iSAR(Symbol(),TF[TF_Tralling],Adım,Maksimum,0);
if (ipucu==OP_BUY)
{
prc = NormalizeDouble(prc - delta*Nokta,Rakamlar);
if(price-STOPLEVEL*Nokta < prc) prc=0;
OK("cm_SL_Satın Al", prc, 4, clrAqua);
}
if (ipucu==OP_SELL)
{
prc = NormalizeDouble(prc + delta*Nokta,Rakamlar);
if(fiyat+STOPLEVEL*Puan > prc) prc=0;
OK("cm_SL_Sat", prc, 4, clrRed);
}
kırmak;
}
dönüş(prc);
}

//------------------------------------------------ --------------------
string StrPer(int per)
{
if (per == 0) per=Period();
if (per == 1) return("M1");
if (per == 5) return("M5");
if (per == 15) return("M15");
if (per == 30) return("M30");
if (per == 60) return("H1");
if (per == 240) return("H4");
if (per == 1440) return("D1");
if (per == 10080) return("W1");
if (per == 43200) return("MN1");
return("dönem hatası");
}
//+------------------------------------------- --------------------+
void ARROW(dize Adı, çift Fiyat, int OK KODU, renk c)
{
ObjectDelete(Ad);
ObjectCreate(Ad, OBJ_ARROW ,0,Zaman[0],Fiyat,0,0,0,0);
ObjectSetInteger(0,Ad,OBJPROP_ARROWCODE,OKCODE);
ObjectSetInteger(0,Ad,OBJPROP_SELECTABLE, false);
ObjectSetInteger(0,Ad,OBJPROP_SELECTED, false);
ObjectSetInteger(0,Ad,OBJPROP_COLOR,c);
ObjectSetInteger(0,Ad,OBJPROP_WIDTH, 1);
}
//------------------------------------------------ --------------------
renk Renk(bool P,renk a,renk b)
{
eğer (P) döner(a);
dönüş(b);
}
//------------------------------------------------ --------------------

 
Vladimir Ozharovskiy :
Lütfen bunu nereye koyacağımı söyler misin? //+------------------------------------------- --------------------+

Peki .... eğer çok kritikse

Bunu yap:

 //+------------------------------------------------------------------+
//|  Проверяет объем ордера на корректность                          |
//+------------------------------------------------------------------+

Güzel..)))

 
Alekseu Fedotov :

Peki .... eğer çok kritikse

Bunu yap:

Güzel..)))

Ama ciddice?)

 
Vladimir Ozharovskiy :

Ama ciddice?)

Fonksiyonun kendisinden bahsediyorsanız, programın en sonuna kopyalayıp yapıştırın,

void OnTick() işlevi dışında gerekli

 
Vladimir Ozharovskiy :

Ama ciddice?)

Anladığım kadarıyla, bu işlev açık artırmaya katılmıyor, açıklamayı kontrol ediyor ve rapor ediyor

 
Alekseu Fedotov :

Fonksiyonun kendisinden bahsediyorsanız, programın en sonuna kopyalayıp yapıştırın,

void OnTick() işlevi dışında gerekli

Ve sonra bir insan ne yapmalı? Hala onu doğru araman gerekiyor!

 
Yardımcı olacak gibi görünüyor.. Teşekkürler!