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

 

Dinamik giriş parametrelerini iCustom aracılığıyla göstergeye geçirmek mümkün müdür? Bunu yapmaya çalıştığımda, her yeni dinamik giriş parametresi için yeni bir gösterge penceresi açılıyor.

   if (NewBarCur())BulsPeriod++;
   double sep_window= iCustom ( Symbol (), PERIOD_CURRENT , "Bulls" ,BulsPeriod, 0 , 0 );
 
Ve böyle bir soru, örneğin, test çizelgesinin sonuna kadar 1 çubuk veya 3 dakika kaldığını bir şekilde öğrenebilir misiniz?
 
Artyom Trishkin :

Bu başlıkta, yeni MQL4'te programlamayı gerçekten anlamak ve öğrenmek isteyenlere ve MQL5'e kolayca geçmek isteyenlere yardım etmeye başlamak istiyorum - diller çok benzer.

Burada görevleri, bunları çözmek için algoritmaları ve bu arada, MT için programlama ile bir şekilde veya başka bir şekilde ilgili soruları tartışmak mümkün olacaktır.

Forumumuzun diğer deneyimli katılımcılarının sorunların çözümüne geleceğini ve konu herkesin ilgisini çekeceğini umuyorum.


Artyom Trishkin :

Bu başlıkta, yeni MQL4'te programlamayı gerçekten anlamak ve öğrenmek isteyenlere ve MQL5'e kolayca geçmek isteyenlere yardım etmeye başlamak istiyorum - diller çok benzer.

Burada görevleri, bunları çözmek için algoritmaları ve bu arada, MT için programlama ile bir şekilde veya başka bir şekilde ilgili soruları tartışmak mümkün olacaktır.

Forumumuzun diğer deneyimli katılımcılarının sorunların çözümüne geleceğini ve konu herkesin ilgisini çekeceğini umuyorum.


Artyom Trishkin :

Bu başlıkta, yeni MQL4'te programlamayı gerçekten anlamak ve öğrenmek isteyenlere ve MQL5'e kolayca geçmek isteyenlere yardım etmeye başlamak istiyorum - diller çok benzer.

Burada görevleri, bunları çözmek için algoritmaları ve bu arada, MT için programlama ile bir şekilde veya başka bir şekilde ilgili soruları tartışmak mümkün olacaktır.

Forumumuzun diğer deneyimli katılımcılarının sorunların çözümüne geleceğini ve konu herkesin ilgisini çekeceğini umuyorum.


Artyom Trishkin :

Bu başlıkta, yeni MQL4'te programlamayı gerçekten anlamak ve öğrenmek isteyenlere ve MQL5'e kolayca geçmek isteyenlere yardım etmeye başlamak istiyorum - diller çok benzer.

Burada görevleri, bunları çözmek için algoritmaları ve bu arada, MT için programlama ile bir şekilde veya başka bir şekilde ilgili soruları tartışmak mümkün olacaktır.

Forumumuzun diğer deneyimli katılımcılarının sorunların çözümüne geleceğini ve konu herkesin ilgisini çekeceğini umuyorum.


Artyom Trishkin :

Bu başlıkta, yeni MQL4'te programlamayı gerçekten anlamak ve öğrenmek isteyenlere ve MQL5'e kolayca geçmek isteyenlere yardım etmeye başlamak istiyorum - diller çok benzer.

Burada görevleri, bunları çözmek için algoritmaları ve bu arada, MT için programlama ile bir şekilde veya başka bir şekilde ilgili soruları tartışmak mümkün olacaktır.

Forumumuzun diğer deneyimli katılımcılarının sorunların çözümüne geleceğini ve konu herkesin ilgisini çekeceğini umuyorum.


Artyom

Artyom Trishkin :

Bu başlıkta, yeni MQL4'te programlamayı gerçekten anlamak ve öğrenmek isteyenlere ve MQL5'e kolayca geçmek isteyenlere yardım etmeye başlamak istiyorum - diller çok benzer.

Burada görevleri, bunları çözmek için algoritmaları ve bu arada, MT için programlama ile bir şekilde veya başka bir şekilde ilgili soruları tartışmak mümkün olacaktır.

Forumumuzun diğer deneyimli katılımcılarının sorunların çözümüne geleceğini ve konu herkesin ilgisini çekeceğini umuyorum.


çözmeme yardım et, danışmana takip eden durdurma işlevini ekledim, derledim, iki hata veriyor. - Kafamı kırdım, baykuş yapmak için nasıl düzelteceğimi anlayamıyorum. Doğru, fiyat sırasıyla kanalın üst sınırına ve alt sınırına dokunduktan sonra işlemler eski stratejinin koşullarına göre kapatılır. Burada da bir şeylerin değişmesi gerektiğini anlıyorum. - DPR ordusunun adamlarına cevap verin.

#property telif hakkı "Telif Hakkı 2017, MetaQuotes Software Corp."

#özellik bağlantısı "https://www.mql5.com"

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

#mülkiyet katı


//------------------------------------------------ ---------

dış çift Lot = 0,01;

harici int TakeProfit = 600;

harici int StopLoss = 25;

harici int Sihir = 0001;

dış int kayma = 3;

harici int TralType = 0; // 0-SAR, 1-ATR, 2-HMA

harici çift SAR_Adım = 0.02;

harici çift SAR_Max = 0,2;

harici int ATR_Period = 14;

harici çift ATR_K = 2.0;

harici int HMA_Period = 16;

harici int HMA_Method = 3;

harici int HMA_Shift = 0;

tarihsaat LBT;

//------------------------------------------------ ---------

extern string TMA = "TMA göstergesinin parametreleri";

extern string TimeFrame = "geçerli zaman çerçevesi";

extern int HalfLength = 56;

extern int Fiyat = PRICE_CLOSE;

harici çift ATRMÇarpan = 2.0;

harici int ATRPeriyot = 100;

extern bool Interpolate = true;

//------------------------------------------------ ---------

çift FiyatYüksek, FiyatDüşük, SL, TP;

int bileti;


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

//| uzman başlatma işlevi |

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

int OnInit()

{

if (Rakamlar == 3 || Basamaklar == 5)

{

Kâr Al *= 10;

StopLoss *= 10;

kayma *= 10;

}

dönüş(INIT_SUCCESSED);

}

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

//| Uzman başlatmasızlaştırma işlevi |

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

geçersiz OnDeinit(const int nedeni)

{


}

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

//| Uzman onay işlevi |

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

geçersiz OnTick()

{

PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPperiod, Interpolate, 1, 0);

PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPperiod, Interpolate, 2, 0);

if(CountSell() == 0 && Teklif >= FiyatYüksek)

{

bilet = OrderSend(Symbol(), OP_SELL, Lot, Bid, Slippage, 0, 0, "TMA robotu", Magic, 0, Red);

eğer (bilet > 0)

{

SL = NormalizeDouble(Teklif + StopLoss*Puan, Rakamlar);

TP = NormalizeDouble(Teklif - TakeProfit*Puan, Rakamlar);

if (OrderSelect(bilet, SELECT_BY_TICKET))

if (!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

Print("Satış emri değiştirme hatası !");

}

}

if (CountBuy() == 0 && Sor <= FiyatDüşük)

{

bilet = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "TMA robotu", Magic, 0, Blue);

eğer (bilet > 0)

{

TP = NormalizeDouble(Sor + Kâr Al*Puan, Rakamlar);

SL = NormalizeDouble(Sor - Kaybı Durdur*Puan, Rakamlar);

if (OrderSelect(bilet, SELECT_BY_TICKET))

if(!OrderModify(bilet, OrderOpenPrice(), SL, TP, 0))

Print("Satın alma siparişi değiştirilirken hata oluştu!");

} else Print("Satın alma siparişi açılırken hata oluştu");

}

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

//| uzman başlatma işlevi |

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

int init()

{

//--------


//--------

dönüş(0);

}

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

//| Uzman onay işlevi |

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

geçersiz OnTick()

{

PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPperiod, Interpolate, 1, 0);

PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPperiod, Interpolate, 2, 0);

if(CountSell() == 0 && Teklif >= FiyatYüksek)

{

bilet = OrderSend(Symbol(), OP_SELL, Lot, Bid, Slippage, 0, 0, "TMA robotu", Magic, 0, Red);

eğer (bilet > 0)

{

SL = NormalizeDouble(Teklif + StopLoss*Puan, Rakamlar);

TP = NormalizeDouble(Teklif - TakeProfit*Puan, Rakamlar);

if (OrderSelect(bilet, SELECT_BY_TICKET))

if (!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

Print("Satış emri değiştirilirken hata oluştu!");

} else Print("Satış emri açılırken hata oluştu!");

}

if (CountBuy() == 0 && Sor <= FiyatDüşük)

{

bilet = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "TMA robotu", Magic, 0, Blue);

eğer (bilet > 0)

{

TP = NormalizeDouble(Sor + Kâr Al*Puan, Rakamlar);

SL = NormalizeDouble(Sor - Kaybı Durdur*Puan, Rakamlar);

if (OrderSelect(bilet, SELECT_BY_TICKET))

if(!OrderModify(bilet, OrderOpenPrice(), SL, TP, 0))

Print("Satın alma siparişi değiştirilirken hata oluştu!");

} else Print("Satın alma siparişi açılırken hata oluştu");

}

if (<= FiyatDüşük && CountSell() > 0) sor

{

for (int i = OrdersTotal() -1; i>0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderMagicNumber() == Magic && OrderType() == OP_SELL)

if (!OrderClose(OrderTicket(), OrderLots(), Sor, Kayma, Siyah))

Print("Satış emri kapatılırken hata oluştu!");

}

}

}

if (Teklif >= FiyatYüksek && CountBuy() > 0)

{

for (int i = OrdersTotal() -1; i>0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderMagicNumber() == Magic && OrderType() == OP_BUY)

if(!OrderClose(OrderTicket(), OrderLots(), Teklif, Kayma, Siyah))

Print("Satın alma siparişi kapatılırken hata oluştu!");

}

}

}

}

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

int SaySat()

{

int sayı = 0;

for (int ticaret = OrdersTotal()-1; ticaret>=0; ticaret--)

{

if(Sipariş Seçimi(ticaret, SELECT_BY_POS, MODE_TRADES))

{

if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL)

say++;

}

}

dönüş(sayım);

}//+---------------------------------------------- --------------------+

int CountBuy()

{

int sayı = 0;

for (int ticaret = OrdersTotal()-1; ticaret>=0; ticaret--)

{

if(Sipariş Seçimi(ticaret, SELECT_BY_POS, MODE_TRADES))

{

if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)

say++;

}

}

dönüş(sayım);

}

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

//| Uzman başlatmasızlaştırma işlevi |

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

int tanım()

{

//+-------


//+-------

dönüş(0);

}

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

//| uzman başlatma işlevi |

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

int Başlat()

{

//-----

bool hatası = yanlış;

if (LBT!=Zaman[0]) {

if (Sipariş Toplamı()!=0) {

for (int i=0; i<SiparişlerToplam(); i++) {

if (OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()<2) {

çift SL = OrderStopLoss();

if OrderType()==0) {

anahtar(TralType) {

durum 0: SL = iSAR(NULL,0,SAR_Step,SAR_Max,0);

kırmak;

durum 1: SL = Yüksek[1] - iATR(NULL,0,ATR,Period,1)*ATR_K;

kırmak;

durum 2: SL = iCustom(NULL,0,"VininI_HMAsound&amp",HMA_Period,HMA_Method,3,HMA_Shift, fals,fals,"",1,0,0);

kırmak;

}

if (SL<OrderStopLoss())

SL = OrderStopLoss();

}

if (OrderType()==1) {

anahtar(TralType) {

durum 0: SL = iSAR(NULL,0,SAR_Step,SAR_Max,0);

kırmak;

durum 1: SL = Düşük[1] + iATR(NULL,0,ATR,Period,1)*ATR_K;

kırmak;

durum 2: SL = iCustom(NULL,0,"VininI_HMAsound&amp",HMA_Period,HMA_Method,3,HMA_Shift, fals,fals,"",1,0,0);

kırmak;

}

if (SL>OrderStopLoss())

SL = OrderStopLoss();

}

if (SL!=OrderStopLoss()) {

if(!OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0))

hata=doğru;

}

}

}

}

eğer (!hata)

LBT = Zaman[0];

}

dönüş(0);

}

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

 
vkravtzov :

Kodlamayı öğrenin !!!


Kodlamayı öğrenin!!!


Kodlamayı öğrenin!!!


Kodlamayı öğrenin!!!


Kodlamayı öğrenin!!!


Kodlamayı öğrenin!!!


Kodlamayı öğrenin!!!


Kodlamayı öğrenin!!!


Kodlamayı öğrenin!!!


Kodlamayı öğrenin!!!

 
vkravtzov : yardım et, EA'ya takip eden bir durdurma işlevi ekledim, derledim, iki hata veriyor. - Kafamı kırdım, baykuş yapmak için nasıl düzelteceğimi anlayamıyorum. Doğru, fiyat sırasıyla kanalın üst sınırına ve alt sınırına dokunduktan sonra işlemler eski stratejinin koşullarına göre kapatılır. Burada da bir şeylerin değişmesi gerektiğini anlıyorum. - DPR ordusunun adamlarına cevap verin.

yardım etmeye karar verdi. Ancak yazara sorular vardı - bu başlatma işlevlerinden ikisine sahipsiniz - ne yapıyorlar?

 //+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
{
   if ( Digits == 3 || Digits == 5 )
   {
   TakeProfit *= 10 ;
   StopLoss   *= 10 ;
   Slippage   *= 10 ;
   }
   return ( INIT_SUCCEEDED );
}


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//--------
//--------
     return ( 0 );
    }

iki OnTick() işlevi vardır .... Ayrıca, üçüncü işlev int Start()'tır - hepsi bir onay işaretinin gelmesiyle yürütülür. Ve terminal onları hangi sırayla başlatacak?

Hata: OnTick() işlevinin sonunda kapanış ayracı eksik

 //+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
{
  PriceHigh = iCustom ( NULL , 0 , "TMA_Fair" , TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1 , 0 );
  PriceLow  = iCustom ( NULL , 0 , "TMA_Fair" , TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2 , 0 );
   if (CountSell() == 0 && Bid >= PriceHigh)
  {
     ticket = OrderSend ( Symbol (), OP_SELL , Lots, Bid , Slippage, 0 , 0 , "TMA robot" , Magic, 0 , Red);
     if (ticket > 0 )
     {
        SL = NormalizeDouble ( Bid + StopLoss* Point , Digits );
        TP = NormalizeDouble ( Bid - TakeProfit* Point , Digits );
         if ( OrderSelect (ticket, SELECT_BY_TICKET ))
           if (! OrderModify (ticket, OrderOpenPrice (), SL, TP, 0 ))
                 Print ( "Ошибка модификации ордера на продажу!" );
     }
  }
   if (CountBuy() == 0 && Ask <= PriceLow)
  {
     ticket = OrderSend ( Symbol (), OP_BUY , Lots, Ask , Slippage, 0 , 0 , "TMA robot" , Magic, 0 , Blue);
     if (ticket > 0 )
     {
        TP = NormalizeDouble ( Ask + TakeProfit* Point , Digits );
        SL = NormalizeDouble ( Ask - StopLoss* Point , Digits );
         if ( OrderSelect (ticket, SELECT_BY_TICKET ))
             if (! OrderModify (ticket, OrderOpenPrice (), SL, TP, 0 ))
                 Print ( "Ошибка модификации ордера на покупку!" );
     }   else Print ( "Ошибка открытия ордера на покупку" );
   }
}     // Эту скобку добавил !!!!!!!!!!!!!!!!!!!!!!!!!

Şimdi derleyici 8 hata buldu. kaldırıldı

 //+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//--------
//--------
     return ( 0 );
    }


//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
{
//+-------
//+-------
   return (0);
   }

Hatalar 7 oldu

if OrderType()==0) yerine if: if(OrderType()==0) sonrasında bir parantez kullanmanız gerekir - 8 hata var

İki yerde iATR(NULL,0,ATR, Period ,1) - iATR(NULL,0,ATR_Period,1) gerekli - 2 hata var

bool hatası = yanlış; bool hatası = yanlış; - 3 hata var

VininI_HMAsound&amp göstergesini nereden edinebilirim? Oradaki ayarlar nelerdir? = o zaman hata 1 kalır

Ve neden üç yerde soru soruyorsun?

 

MT4'te ücretsiz danışmanları ve sinyalleri indirip yüklememe yardım et, bulamıyorum, bulamıyorum, bulamıyorum ama indiremiyorum. Bana nereye bakacağımı söyle

 
vovik36 Степанов :

MT4'te ücretsiz danışmanları ve sinyalleri indirip yüklememe yardım et, bulamıyorum, bulamıyorum, yalnızca yükleyebilirim, ancak indiremiyorum. Bana nereye bakacağımı söyle

Önce okulu bitir, sonra gel.

 
Artyom Trishkin :

Ve bu yüzden?


   for (i=pos; i<rates_total && ! IsStopped (); i++)
     {
       double dmin= 1000000.0 ;
       double dmax=- 1000000.0 ;
       for (k=i-InpKPeriod+ 1 ; k<=i; k++)
       {double ima=iMA(Symbol(),1,60,0,1,0,k);
         if (dmin>ima)  dmin=ima;
         if (dmax<ima)  dmax=ima;
                   Comment (ima);
        }
      ExtLowesBuffer[i]=dmin;
      ExtHighesBuffer[i]=dmax;
     }

Merhaba. Bana neden ima= iMA'yı görmediğini söyle ( Symbol() , 1 , 60 , 0 , 1 , 0 ,k). Yorum yoluyla, satırın kendisinden çok daha yüksek bir alıntı gösterir. Bu nedenle, minimum ve maksimum olması gerektiği gibi hesaplanmaz.

 
Rustam Bikbulatov :

Merhaba. Bana neden ima= iMA ( NULL , 60 , 24 , 0 , 1 , 0 ,k) görmediğini söyle. Yorum yoluyla, satırın kendisinden çok daha yüksek bir alıntı gösterir. Bu nedenle, minimum ve maksimum olması gerektiği gibi hesaplanmaz.

iMA - zaman serilerinde olduğu gibi numaralandırma, 0 - en güncel numara. Ve tam tersi gibisin.
 
Maxim Kuznetsov :
iMA - zaman serilerinde olduğu gibi numaralandırma, 0 - en güncel numara. Ve tam tersi gibisin.

Yanlışlıkla ayarlanmış. Bunu hiçbir şey değiştirmez. K ile yanlış olanı gösteren şeyin özü!