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

 
STARIJ :
Aşağıda bu:

Bir grafik nesne üzerinde fare tıklama olayı

CHARTEVENT_OBJECT_CLICK

X koordinatı

Y koordinatı

Olayın meydana geldiği grafik nesnenin adı


Vay, her şey yolunda görünüyor)
Yardımın için teşekkürler!

 

Grafikte görüntülemek için "r" sonucunu arabelleğe nasıl bağlayacağımı bilmiyorum, lütfen bana söyleyin.

Ders kitaplarındaki örnekleri öğrenemiyorum, insanlara sordum

write - ""p"nin değeri arabelleğe yazılır ve grafikte görüntülenecektir." ve "Genellikle arabellek bir for döngüsü aracılığıyla yazılır."

ama bu bana bir şey söylemiyor!

bir sonuç sadece "r" harfi ve o kadar, onu hiçbir yerde bulamıyorum.


Bir şey daha

örneğin "r" sonucunun nasıl düzgünleştirileceği

İlginiz için teşekkür ederim!
 

Hata nerede? Test cihazında çalışırken, işlev bekleyen siparişi siler , ancak bazen silmez. Niye ya? Çalışma prensibi şu şekildedir: Bir Alış emri TP tarafından kapatıldığında BuyLimit kaldırılır. Söylemek

 ////+------------------DELETE BUYLIM-----------------------------------+
   if ((SchBuyLimLots( Symbol ())-SchBuyLots( Symbol ()))!= 0 )                   //  лот байлимит НЕ лот бая
     {     
       for ( int i= 0 ;i< OrdersTotal ();i++)
        {
         datetime T_op= 0 ,T_lim= 0 ,buys= 0 ;
         if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )== false ) break ;
         if ( OrderMagicNumber ()!=MAGIC || OrderSymbol ()!=SMB_) continue ;
         if ( OrderType ()== OP_BUY )
         if ( OrderCloseTime ()>buys) buys+= OrderCloseTime ();
         buys= OrderCloseTime ();
         T_op=buys;                                                       //  время закрытия бая
         if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )== false ) break ;
         if ( OrderMagicNumber ()!=MAGIC || OrderSymbol ()!=SMB_) continue ;
           {
             if ( OrderType ()== OP_BUYLIMIT )
              {
               T_lim= OrderOpenTime ();                                     //  время закрытия селл
               ticket= OrderTicket ();
               if (T_lim<=T_op)                                             //  разность
               res= OrderDelete ( ticket, clrMagenta );
               if (res< 1 )
               {
                   Print ( GetLastError ());
               }
              }
           }
        }
     }
 
ZZuretc :

Hata nerede? Test cihazında çalışırken, işlev bekleyen siparişi siler , ancak bazen silmez. Niye ya? Çalışma prensibi şu şekildedir: Bir Alış emri TP tarafından kapatıldığında BuyLimit kaldırılır. Söylemek


OrdersTotal() != OrdersHistoryTotal()

 
Alexey Viktorov : Nasıl bir mucize olduğunu görmedim.

Teşekkür ederim.

 
Dosyalar:
q6a0hh.PNG  12 kb
 

Merhaba.

Stochstick'e dayalı basit bir Uzman Danışman yaptım (en tepede satıyor, en altta alıyor) ve derleyici birdenbire hata veriyor.

Birisi bana nedeninin ne olduğunu ve bu hatanın ne anlama geldiğini söyleyebilir mi? İlk başta braketi bir yere koymayı unuttuğumu düşündüm.

Ama hayır, birkaç kez kontrol ettim - parantezlerde her şey yolunda görünüyor. Yardım için çok minnettar olurum.

Derleyici hataları şunlardır: ')' - tüm kontrol yolları bir değer döndürmez Stokastik-Sinyaller-33.mq4 177 3

')' - tüm kontrol yolları bir değer döndürmez Stokastik-Sinyaller-33.mq4 210 3

İşte EA'nın kendisi ve ekli mq4 dosyası:

Ayrıca buraya bir danışmanın ne kadar güzel ekleneceğini de söyleyin (renkli harflerle editörde olduğu gibi)

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

//| Stokastik-Sinyaller-33.mq4 |

//| Telif Hakkı 2017, MetaQuotes Software Corp. |

//| https://www.mql5.com |

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

#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ı

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

bool New_Bar=false; // Yeni çubuk bayrağı

dış çift H_line=80; // Üst (aşırı alım) Stokastik çizgi

dış çift L_line=20; // Alt (aşırı satım) Stokastik çizgi

extern int Kayma=2; // kayma

harici int SL; // verilen siparişin SL'si

harici dahili TP; // verilen siparişin TP'si

dış çift Lts; // Verilen siparişin parti büyüklüğü

bool B_Flag=false, // SATIN AL sinyal bayrağı

S_Flag=false, // SATIŞ sinyal bayrağı

ORD_Buy=false, // Açık bir Satın Alma pozisyonunun bayrağı

ORD_Sell=yanlış; // Açık pozisyonun bayrağı Sat

bool İş=doğru; // EA'nın çalışmasına izin veren bayrak. true - kritik bir hata yok, false - var.

dize Symb; // Finansın adı. alet

int Crit_Error=1111111; // Kritik hata numarası

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

//| Uzman onay işlevi |

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

geçersiz OnTick()

{

int

Toplam, // Penceredeki sipariş sayısı

İpucu=-1, // Tür seçili. siparişler (B=0,S=1)

bilet; // Sipariş numarası

çift

M_1, M_2, M_3, // 1, 2 ve 3 çubuklarda MAIN değeri

çok güzelsin; // Miktar seçilen sırayla lotlar

bool Ans_Close; // Başarılı sipariş kapatma bayrağı (1-kapalı, 0-kapalı değil)

boolAns_Open; // Başarılı sipariş açma bayrağı (1-açıldı, 0-açılmadı)

//------------------------------------------------ --------------- 1 --

// Kritik hatayı kontrol et

if(İş==yanlış) // Kritik hata

{

Alert("Kritik hata. Expert Advisor çalışmıyor.");

dönüş; // başlangıçtan çık()

}

//------------------------------------------------ --------------- 2 --

// Yeni çubuk

Fun_New_Bar(); // Fonksiyonlara erişim

if (New_Bar==false) // Bar yeni değilse..

dönüş; // ..sonra ayrılıyoruz

//------------------------------------------------ ------------- 3 --

// Siparişler için muhasebe

Sembol=Sembol(); // fin.instr'nin adı.

toplam=0; // Sipariş sayısı

for(int i=1; i<=OrdersTotal(); i++) // Sipariş üzerinden döngü

{

if (OrderSelect(i-1,SELECT_BY_POS)==true) // Sonraki Varsa

{ // Siparişlerin analizi:

eğer (OrderSymbol()!=Symb)devam ederse; // Bizim Fincemiz değil. alet

Bilet=SiparişTicket(); // Seçilen numara. ord.

Tip=SiparişTürü(); // Seçilen siparişin türü.

Parti=SiparişLots(); // Parti sayısı

}

başka

{

Alert("OrderSelect() bir hata döndürdü - ",GetLastError()); // Bir sipariş seçmek mümkün değilse, o zaman ...

dönüş; // Baştan çık

}

}

//------------------------------------------------ ------------- 4 --

// Ticaret kriterleri Durum analizi

M_1=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,1);// 1 bar

M_2=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,2);// 2 bar

M_3=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,3);// 3 bar

//------------------------------------------------ ------------- 5 --

if(M_2>=H_line) // Stokastik aşırı alım çizgisini geçerse

{

if(M_3 <= M_2 && M_2 > M_1) // Stokastik'te bir üst tepe belirdi ...

{

if(S_Flag==true) // Bir Satış pozisyonu açıksa, o zaman...

dönüş; // başlangıçtan çık()

// Satış pozisyonu açık değilse, o zaman ...

S_Flag=true; // SATIŞ sinyali olduğu bayrağını ayarlayın

B_Flag=yanlış; // SATIN AL sinyali olmadığı bayrağını ayarlayın

if(ORD_Buy==true) // Açık varsa Sipariş satın al...

{

if(Tip!=0) // Kontrol edin: Emir TİPİ açık emir BAYRAĞI ile eşleşmiyor...

{

iş=yanlış; // Expert Advisor çalışmayacak

Alert("Sipariş TİPİ, açık bir emrin BAYRAĞI ile eşleşmiyor. Çıkış başlıyor."); // Bir uyumsuzluk varsa, EA işini bitirir

dönüş; // Baştan çık

}

Ans_Close=Close_Order(Bilet,Parti,Kayma,Tip); // Açık bir Satınalma siparişini kapat

if(Ans_Close==false) // Kapatma başarısız olursa...

{

Alert("Sipariş kapatılamadı. EA çalışmayı durduruyor.\n Kritik hata numarası ", Crit_Error);

dönüş; // Çıkış başlangıcından

}

}

Ans_Open=Open_Order(Symb,Lts,SL,TP,1); // KISA BİR POZİSYON AÇ

if(Ans_Open==false) // Satışı açmak mümkün değilse, o zaman...

{

Alert("Sipariş açılamadı. EA çalışmayı durdurur.\n Kritik hata numarası ", Crit_Error);

dönüş; // Çıkış başlangıcından

} // Sat'ı açmak mümkün olsaydı, o zaman...

ORD_Sell=doğru; // KISA pozisyonun açık olduğu bayrağını ayarlayın

ORD_Buy=yanlış; // UZUN pozisyon olmadığı bayrağını ayarlayın

}

dönüş; // Baştan çık

}

//------------------------------------------------ -------------------------- 6 --

if(M_2<=L_line) // Stokastik aşırı satım çizgisini geçerse

{

if(M_3 >= M_2 && M_2 < M_1) // Alt Tepe Göründü(SİNYAL AL)

{

if(B_Flag==true) // Bir Buy pozisyonu açıksa, o zaman...

dönüş; // başlangıçtan çık()

// Al pozisyonu açık değilse, o zaman ...

B_Flag=true; // SATIN AL sinyalinin göründüğü bayrağı ayarlayın

S_Flag=yanlış; // SATIŞ sinyali olmadığı bayrağını ayarlayın

if(ORD_Sell==true) // Açık varsa. Satış emri,...

{

if(Tip!=1) // Kontrol edin: Emir TİPİ, açık emir BAYRAĞI ile eşleşmiyor...

{

iş=yanlış; // Expert Advisor çalışmayacak

Alert("Sipariş TİPİ, açık bir emrin BAYRAĞI ile eşleşmiyor. Çıkış başlıyor."); // Bir uyumsuzluk varsa, EA işini bitirir

dönüş; // Baştan çık

}

Ans_Close=Close_Order(Bilet,Parti,Kayma,Tip); // Açık bir Satış emrini kapatın

if(Ans_Close==false) // Kapatma başarısız olursa...

{

Alert("Sipariş kapatılamadı. EA çalışmayı durduruyor.\n Kritik hata numarası ", Crit_Error);

dönüş; // Çıkış başlangıcından

}

}

Ans_Open=Open_Order(Symb,Lts,SL,TP,0); // UZUN BİR POZİSYON AÇ

if(Ans_Open==false) // Buy'u açmak mümkün değilse, o zaman...

{

Alert("Sipariş açılamadı. EA çalışmayı durdurur.\n Kritik hata numarası ", Crit_Error);

dönüş; // Çıkış başlangıcından

} // Satın Al'ı açmayı başardıysak, o zaman...

ORD_Sell=yanlış; // KISA pozisyon olmadığı bayrağını ayarlayın

ORD_Buy=doğru; // UZUN bir pozisyonun açık olduğu bayrağını ayarlayın

}

dönüş; // Baştan çık

}

}

//+------------------------------------------- ------------------- 7 --

void Fun_New_Bar() // Algılama işlevi ..

{ // .. yeni çubuk

statik tarihsaat New_Time=0; // Geçerli çubuğun zamanı

New_Bar=yanlış; // Yeni çubuk yok

if(New_Time!=Time[0]) // Zamanı Karşılaştır

{

New_Time=Zaman[0]; // Şimdi zaman

New_Bar=true; // Yeni bir çubuk aldım

}

}

//------------------------------------------------ --------------- sekiz --

bool Close_Order(int F_Ticket,double F_Lot,int F_Slippage,int F_Tip) // Sipariş kapatma fonksiyonu

{

double Close_Price=0; // Emir kapanış fiyatı

süre(doğru)

{

Yeniler(); // Veriyi güncelle

if(F_Tip==0) // Sipariş Buy ise ...

Close_Price=Teklif; // Teklif kapanış fiyatı

Close_Price=Sor; // Ve eğer emir Sat ise kapanış fiyatı Ask olur.

bool Ans_Close=SiparişKapat(F_Ticket,F_Lot,Close_Price,F_Slippage); // Al veya Sat kapat

if (Ans_Close==true) // Anladım :)

dönüş(doğru); // close işlevinden çık

Crit_Error=GetLastError(); // Hata numarasını düzelt

if (Fun_Error(Crit_Error)==1) // Hata İşleme

devam etmek; // Yeniden dene

dönüş(yanlış); // Fonksiyon çıkışı

}

}

//------------------------------------------------ --------------- dokuz --

// Emirleri açma

bool Open_Order(string F_Symb,çift F_Lts,int F_SL,int F_TP,int F_Tip)

{

çift Open_Price; // Açık fiyat

string Tip_Deal; // Anlaşma yönü (Al veya Sat)

çift f_sl; // Zararı durdur emirleri

çift f_tp; // Kar almak

int bileti; // Sipariş biletini aç

while(true) // Sipariş kapatma döngüsü.

{

Yeniler(); // Veriyi güncelle

if(F_Tip==1) // Bir SATIŞ açmanız gerekiyorsa, o zaman...

{

open_price=teklif;

Tip_Deal="OP_SELL";

f_sl=NormalizeDouble(Teklif+F_SL*Puan,Rakamlar);

f_tp=NormalizeDouble(Teklif-F_TP*Point,Rakamlar);

}

//-------------------------------- BUY'ı açmanız gerekiyorsa, o zaman...

open_price=sor;

Tip_Deal="OP_BUY";

f_sl=NormalizeDouble(Teklif+F_SL*Puan,Rakamlar);

f_tp=NormalizeDouble(Teklif-F_TP*Point,Rakamlar);

Ticket=OrderSend(F_Symb,Tip_Deal,F_Lts,Open_Price,2,f_sl,f_tp);//SİPARİŞ Açma

if (Bilet > 0) // Başarılı :)

dönüş(doğru); // Fonksiyon çıkışı

Crit_Error=GetLastError(); // Hata numarasını düzelt

if (Fun_Error(Crit_Error)==1) // Hata İşleme

devam etmek; // Yeniden dene

dönüş(yanlış); // Fonksiyon çıkışı

}

}

//------------------------------------------------ --------------- on --

int Fun_Error(int Error) // Hata İşleme Fonksiyonu

{

geçiş (Hata)

{ // Önlenebilir hatalar

case 4: Alert("Ticaret sunucusu meşgul. Tekrar deneyelim..");

uyku(3000); // Basit bir çözüm

dönüş(1); // Fonksiyon çıkışı

case 135:Alert("Fiyat değişti. Tekrar deneyelim..");

Yeniler(); // Veriyi güncelle

dönüş(1); // Fonksiyon çıkışı

case 136:Alert("Fiyat yok. Yeni bir onay işareti bekleniyor..");

while(RefreshRates()==false) // Bir sonraki onay işaretine kadar

Uyku(1); // Döngüde gecikme

dönüş(1); // Fonksiyon çıkışı

case 137:Alert("Aracı meşgul. Tekrar deniyor..");

uyku(3000); // Basit bir çözüm

dönüş(1); // Fonksiyon çıkışı

case 146:Alert("Ticaret alt sistemi meşgul. Tekrar deneniyor..");

Uyku(500); // Basit bir çözüm

dönüş(1); // Fonksiyon çıkışı

// Kritik hatalar

durum 2: Alert("Genel hata.");

dönüş(0); // Fonksiyon çıkışı

case 5: Alert("Eski terminal versiyonu.");

iş=yanlış; // artık çalışma

dönüş(0); // Fonksiyon çıkışı

case 64: Alert("Hesap bloke edildi.");

iş=yanlış; // artık çalışma

dönüş(0); // Fonksiyon çıkışı

case 133:Alert("Ticaret yasaktır.");

dönüş(0); // Fonksiyon çıkışı

case 134:Alert("İşlemi tamamlamak için yeterli para yok.");

dönüş(0); // Fonksiyon çıkışı

varsayılan: Alert("Bir hata oluştu",Hata); // Diğer seçenekler

dönüş(0); // Fonksiyon çıkışı

}

}

//------------------------------------------------ -------------- on bir --



Dosyalar:
 
RomanRott : Mevcut ATP'nin maksimum ve minimum değerlerini nasıl bulacağımı söyler misiniz?
   double max=- 10000 , min=+ 10000 , ATR;
   for ( int n= 0 ; n< WindowFirstVisibleBar ();n++)
   {
      ATR= iATR ( NULL , 0 , 14 , n);
       if (max<ATR)max=ATR;
       if (min>ATR)min=ATR;
   }
   Alert ( "min = " , DoubleToStr (min, 4 ), "    max = " , DoubleToString (max, 4 ));
Diğer göstergeler için de benzer şekilde
 
Skander : Herkese merhaba, Stochstick'e dayalı basit bir Expert Advisor yaptım (en tepede satıyor, en altta alıyor) ve derleyici birdenbire hata veriyor.
Birisi bana nedeninin ne olduğunu ve bu hatanın ne anlama geldiğini söyleyebilir mi? İlk başta braketi bir yere koymayı unuttuğumu düşündüm.
Ama hayır, birkaç kez kontrol ettim - parantezlerde her şey yolunda görünüyor. Yardım için çok minnettar olurum.
Derleyici hataları şunlardır: ')' - tüm kontrol yolları bir değer döndürmez Stohastic-Signals-33.mq4 177 3
')' - tüm kontrol yolları bir değer döndürmez Stokastik-Sinyaller-33.mq4 210 3
//------------------------------------------------ --------------- sekiz --
bool Close_Order(int F_Ticket,double F_Lot,int F_Slippage,int F_Tip) // Sipariş kapatma fonksiyonu
{
double Close_Price=0; // Emir kapanış fiyatı
süre(doğru)
{
Yeniler(); // Veriyi güncelle
if(F_Tip==0) // Sipariş Buy ise ...
Close_Price=Teklif; // Teklif kapanış fiyatı
Close_Price=Sor; // Ve eğer emir Sat ise kapanış fiyatı Ask olur.
bool Ans_Close=SiparişKapat(F_Ticket,F_Lot,Close_Price,F_Slippage); // Al veya Sat kapat
if (Ans_Close==true) // Anladım :)
dönüş(doğru); // close işlevinden çık
Crit_Error=GetLastError(); // Hata numarasını düzelt
if (Fun_Error(Crit_Error)==1) // Hata İşleme
devam etmek; // Yeniden dene
dönüş(yanlış); // Fonksiyon çıkışı
}
}

MetaEditor'da Derle düğmesini tıklayın ve hata mesajını okuyun - bir satır numarası ve konum numarası var

 //--------------------------------------------------------------- 8 --
   bool Close_Order( int F_Ticket, double F_Lot, int F_Slippage, int F_Tip)     // Ф-ия закрытия ордера
  {
   double Close_Price= 0 ;                       // Цена закрытия ордера 
   while ( true )
     {
        ....................................
            continue ;                           // Повторная попытка
         return ( false );                                 // Выход из функции
     }
     return false ;   // Компилятор хочет return в конце функции
  }

Program kodunu SRC düğmesiyle girin - bu şekilde yerel okuyucular daha çok beğeniyor !!! ve uzun ayak beziniz - BRRRRR

Buton kod mesaj metnine kaynak kodu eklemek için tasarlanmıştır. Tıklandığında, kodu yapıştırmanız gereken boş bir pencere belirir ve ardından Ekle düğmesini tıklayın.

 
STARIJ :

MetaEditor'da Derle düğmesini tıklayın ve hata mesajını okuyun - bir satır numarası ve konum numarası var

Program kodunu SRC düğmesiyle girin - bu şekilde yerel okuyucular daha çok beğeniyor !!! ve uzun ayak beziniz - BRRRRR

Düğme, kaynak kodunu mesaj metnine eklemek için tasarlanmıştır. Tıklandığında, kodu yapıştırmanız gereken boş bir pencere belirir ve ardından Ekle düğmesini tıklayın.


Teşekkür ederim.