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

 
a196012a :

0,1 hacimli bir sipariş açmak için kodunuzu bir blokla destekleyin (void start() işlevinden hemen sonra)

Ancak bazı nedenlerden dolayı, program bu siparişlerin kapanmasına yanıt olarak artan hacimde herhangi bir sipariş açmıyor (0,3 lot)

KODUNUZDA ANLAMADIĞIM NOKTALAR

1. Eğer doğru anladıysam МН=123, yalnızca hacmi 0,3 olan siparişleri atadınız.

Datetime işlevinde SearTim(int s) MH=123 olan ancak hacmi 0.1 olan bir sipariş arıyorsunuz

Ancak 0.1 hacimli bir sipariş MN=123 olamaz çünkü bu MN sadece 0.1 hacimli emirlere atanır.

2. Datetime SearTim(int s) ve int sear() fonksiyonlarının gövdelerinde daha doğrusu yorumlarda 0.3 hacimli bir emir açılması gerektiği belirtilmektedir.

Neden aynı koşullar altında birden fazla artan hacimle açık siparişler anlamıyorum.

Sonuçta, ilk blokta daha yüksek hacimli siparişler açtınız.



Her siparişi 0,1 hacim ile kapattıktan sonra 0,3 hacimli bir emir açacak ve 0,1 hacimli bir emrin açılış saatinin değerini kaydedecek bir kod yazarsanız çok minnettar olurum.

Bu durumda, kodunuzda tüm sorularıma cevap bulmak için şu ana kadar mütevazı bilgim ve referans literatürüm olan Print() işlevini kullanmak için elimden geleni yapacağım.

NOT:

Aynı türden 0,1 hacimli ve 0,3 hacimli tüm siparişlerim var - yalnızca SEL. Bu nedenle yanılmıyorsam int sear() fonksiyonunda emir tipini (AL veya SATIŞ) hesaplamaya gerek kalmayabilir.

Bir kez daha hatırlatmama izin verin, programımın nihai amacı, bir siparişten sonra 0.1 hacimli bir sipariş açmanın saat (dakika değil, saniye değil, sadece saat) değerlerini hatırlamaktır. kapanış fiyatından açılan 0.3'lük bir hacim CL tarafından kapatıldı


Size pek bir şey anlatamadığım için kusura bakmayın çünkü programlama dilini bilmeniz gerekiyor. Zaten bir şey programladığınızı ve programlamayı bilen birine güvendiğinizi düşündüm.

Önce programlamayı öğrenmelisin. Size neyi ve nasıl olduğunu açıklarsam, bu bir programlama dili öğretmek olacaktır.

Expert Advisors örneklerine, nasıl yazıldığına bakın ve programları en küçüğünden yazmaya çalışın. Ve zaten karmaşık olan bir program yazmaya çalışıyorsunuz.

İşte bir öğretici ve komut yazma örnekleri ve örnek modüller.

Dosyalar:
MQL4.zip  2226 kb
 

Bu kadar basit bir soruyu ele alıyorum, İşte kapanış bloğu.

Emrin karı pozitif hale geldiğinde, bu emri ve bu kârın tamamı için, kârsız pozisyonun mümkün olduğu kadarını kapatır. Perekr etkinse.


Bunu, yalnızca kârlı pozisyonun kârı kârsız olanın TÜM zararını kapsadığında, yani bir siparişin kârı diğerinin kaybına eşit veya ondan daha büyük olacak şekilde, her iki pozisyonu da kapatacak şekilde değiştirmeniz gerekir.

if(Mas_Tip[1]>0)

     {

      if(Bidt-step*Point>=NormalizeDouble(Bid,Digits))

        {

         Profit=AccountBalance()-StartProfit;

         Askt=NormalizeDouble(Ask,Digits);

         Bidt=NormalizeDouble(Bid,Digits);

         for(int i=1; i<=OrdersTotal(); i++)

           {

            if(OrderSelect(i-1,SELECT_BY_POS)==true && OrderType()==OP_SELL && 

               OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)

              {

               if(Razn<2)

                 {


                  if(Perekr && OrderProfit()>0 && max_lot>=Lots_per) //перекрытие

                    {

                     double profit=OrderProfit();

                     Print("закрываю по перекрытию");


                     ClosePosBySelect(OrderLots());

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

                       {

                        if(OrderSelect(f,SELECT_BY_POS)==true && OrderType()==OP_BUY && 

                           OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)

                          {

                           if(OrderProfit()<0)

                             {

                              if(profit>=MathAbs(OrderProfit()))

                                {

                                 Print("закрываю по перекрытию");


                                 ClosePosBySelect(OrderLots());

                                }

 

Arkadaşlar merhaba. Bir acemi yardım edin.

Fiyat herhangi bir göstergeyi geçtiğinde, e-postama bununla ilgili bir mesaj gönderilmesini istiyorum. Görünüşe göre bunu nasıl yapacağımı buldum, ancak bu kesişme gerçekleşir gerçekleşmez, mevcut mum kapanana kadar yüzlerce e-posta gönderiliyor. Sadece bir mesaj göndermek için ne yapabilirim? İşte bir örnek:

if((iSAR(NULL, 0,Step,Maximum, 1)< iClose (NULL,0,1))&&(iSAR(NULL, 0,Step,Maximum, 2)>iClose(NULL,0,2))) {

bool res = SendMail("Sinyal al", "Sinyal al");

}


if((iSAR(NULL, 0,Step,Maximum, 1)>iClose(NULL,0,1))&&(iSAR(NULL, 0,Step,Maximum, 2)<iClose(NULL,0,2))) {

SendMail("Satış sinyali", "Satış sinyali");

}

 
ev85 :

Arkadaşlar merhaba. Bir acemi yardım edin.

Fiyat herhangi bir göstergeyi geçtiğinde, e-postama bununla ilgili bir mesaj gönderilmesini istiyorum. Görünüşe göre bunu nasıl yapacağımı buldum, ancak bu kesişme gerçekleşir gerçekleşmez, mevcut mum kapanana kadar yüzlerce e-posta gönderiliyor. Sadece bir mesaj göndermek için ne yapabilirim? İşte bir örnek:

if((iSAR(NULL, 0,Step,Maximum, 1)<iClose(NULL,0,1))&&(iSAR(NULL, 0,Step,Maximum, 2)>iClose(NULL,0,2))) {

bool res = SendMail("Sinyal al", "Sinyal al");

}


if((iSAR(NULL, 0,Step,Maximum, 1)>iClose(NULL,0,1))&&(iSAR(NULL, 0,Step,Maximum, 2)<iClose(NULL,0,2))) {

SendMail("Satış sinyali", "Satış sinyali");

}

Bir parabolik ile her şey basittir, bayrağı duruma getirin. Veya int türünde basit bir değişken ve değer her sinyalle değişir.

 static bool flag;
 if (flag && iSAR ( NULL , 0 ,Step,Maximum, 1 ) < iClose ( NULL , 0 , 1 ) && iSAR ( NULL , 0 ,Step,Maximum, 2 ) > iClose ( NULL , 0 , 2 )){

 bool res = SendMail ( "Сигнал на покупку" ,   "Сигнал на покупку" );
 flag = false ;
 }


 if (!flag && iSAR ( NULL , 0 ,Step,Maximum, 1 ) > iClose ( NULL , 0 , 1 ) && iSAR ( NULL , 0 ,Step,Maximum, 2 ) < iClose ( NULL , 0 , 2 )){

 SendMail ( "Сигнал на продаж" ,   "Сигнал на продажу" );
 flag = true ;
 }
 

Hepinize iyi günler! Lütfen, Trailing Stop ile başa çıkmama yardım edin. Başlangıçta SL = 100 olması ve fiyat pozisyon açılışından 30 puan daha yüksek olduğunda İzlemenin çalışması şartıyla Expert Advisor Trailing'e yazdım. Bir pozisyon açtıktan hemen sonra değişiklik yapar ve standart SL'yi 30 olarak değiştirir ve ancak ondan sonra hareket ettirir.

void Sondaki ()

{

int SLoss = 1;

double StopL = NormalizeDouble(OrderOpenPrice() + SLoss*Point, Digits);

double StopL2 = NormalizeDouble(OrderOpenPrice() - SLoss*Point, Digits);

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

{

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

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

{

if (OrderType() == OP_BUY && OrderStopLoss() >= StopL)

{

if (Teklif - StopL > TrailingStop*Point)

{

if (OrderStopLoss() < Teklif-(TrailingStop+TrailingStep)*Puan)

{

if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid-TrailingStop*Point, Digits), 0, 0))

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

}

}

}

if (OrderType() == OP_SELL && OrderStopLoss() <= StopL2)

{

if (StopL2 - Sor > TrailingStop*Point)

{

if (OrderStopLoss() > Ask+(TrailingStop+TrailingStep)*Puan)

{

if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask+TrailingStop*Point, Rakamlar), 0, 0))

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

}

}

}

}

}

}

}

 
Alexey Viktorov :

Bir parabolik ile her şey basittir, duruma bir bayrak koyun. Veya int türünde basit bir değişken ve değer her sinyalle değişir.

Başka bir şeyi unuttum - aksi takdirde statik değişken ilk sinyalden sonra doğru kalacak
 
AlGuru :

Hepinize iyi günler! Lütfen, Trailing Stop ile başa çıkmama yardım edin. Başlangıçta SL = 100 olması ve fiyat pozisyon açılışından 30 puan daha yüksek olduğunda İzlemenin çalışması şartıyla Expert Advisor Trailing'e yazdım. Bir pozisyon açtıktan hemen sonra değişiklik yapar ve standart SL'yi 30 olarak değiştirir ve ancak ondan sonra hareket ettirir.

...
Belki yardım edersin ? Orada, istediğiniz her şeyi yapabileceğiniz bir şablon hazırladım.
 
Artyom Trishkin :
Başka bir şeyi unuttum - aksi takdirde statik değişken ilk sinyalden sonra doğru kalacak

Elsa neden orada? Bence flag == true yeterlidir; veya flag == false; kodda ne var

 if ( flag && ****

if ( ! flag && ****

Bir yönden geçerken, diğer taraftaki kavşağı bekliyoruz ... ve böylece kapalı bir döngü. Ancak ilk başlangıçta nasıl doğru bir şekilde bağlanacağını kendi başına düşünmesine izin verin. Ya da sonra sor...

 
Alexey Viktorov :

Elsa neden orada? Bence flag == true yeterlidir; veya flag == false; kodda ne var

Bir yönden geçerken, diğer taraftaki kavşağı bekliyoruz ... ve böylece kapalı bir döngü. Ancak ilk başlangıçta nasıl doğru bir şekilde bağlanacağını kendi başına düşünmesine izin verin. Ya da sonra sor...

Farklı çubuklardaki iki sinyal aynı yöne giderse?

Sadece salıncak alırsın.

Ama sonuçta sinyal varken her zaman sinyal gönderilmeli ama sinyal verme kararı zaten ayrı ayrı verilmiş.

Bana öyle geliyor ki, her yön için kendi bayrağına sahip olmak ve onu ileri geri değiştirmek en uygunudur. Ancak bir yönün sinyalleri, karşı yönün sinyallerine bağlı değildir.

 
Artyom Trishkin :

Farklı çubuklardaki iki sinyal aynı yöne giderse?

Sadece salıncak alırsın.

Ama sonuçta sinyal varken her zaman sinyal gönderilmeli ama sinyal verme kararı zaten ayrı ayrı verilmiş.

Bana öyle geliyor ki, her yön için kendi bayrağına sahip olmak ve onu ileri geri değiştirmek en uygunudur. Ancak bir yönün sinyalleri, karşı yönün sinyallerine bağlı değildir.

Artyom, cevaba kelimelerle başlamam boşuna değildi.

parabolik katı bir değişime sahiptir, farklı çubuklarda bile bir yönde iki sinyal imkansızdır. Ve bunun için hiçbir şey icat etmenize gerek yok, MA gibi sıfır barda bile tıkır tıkır çalmıyor.

Neden: