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

 
yaaarik777 :
Sadece öğreniyorum, referans kitabını kullanmaya çalışıyorum ama bunun bir tür saçmalık olduğunu anlıyorum, nasıl yapılacağına dair bir örnek görmek istiyorum.
bu makaleyi okuyun işinize yarayacaktır https://www.mql5.com/ru/articles/1399
События в МetaТrader 4
События в МetaТrader 4
  • 2006.05.29
  • Andrey Khatimlianskii
  • www.mql5.com
Статья посвящена программному отслеживанию событий в терминале МetaТrader 4, таких как открытие, закрытие и модификация ордеров, и рассчитана на пользователя, обладающего базовыми навыками работы с терминалом и программирования на MQL 4.
 
yaaarik777 :

Herkese iyi günler! Lütfen sipariş silme işlemini danışmana nasıl koyacağımı söyleyin.

Durum şu:

farklı yönlere bekleyen 2 emir veririz, biri tetiklenir, diğeri silinir ve artık verilmez.

Yardımın için çok minnettar olacağım.

Teşekkür ederim.

Bunun gibi bir şey

    for ( int  pos= OrdersTotal ()- 1 ,ticket= 0 ,trade= 0 ;pos!=- 1 ;pos--)
     {
       if ( OrderSelect (pos, SELECT_BY_POS , MODE_TRADES ) &&  OrderType ()> 1 ) //Если найденный ордер отложенный
        {
         ticket= OrderTicket (); //Запомним его тикет
        }
       else //Если ордер не отложенный
        {
         trade= 1 ; //Запомним,что есть открытая позиция
        }
       if (ticket!= 0  && trade== 1 ) //И если известен отложенный и открыта позиция
        {
          int  OD= OrderDelete (ticket); //Удаляем отложенный
        }
     }
 
Nikolay Gaylis :
"Aramaya devam edelim" - kaldırılmalı!
Forumda, yazılarınızı kendiniz düzenleyebilirsiniz. Yukarıda ayrı gönderilerde yazdığınız her şey tek bir gönderiye sığabilir.
 
Vitalie Postolache :
Forumda, yazılarınızı kendiniz düzenleyebilirsiniz. Yukarıda ayrı gönderilerde yazdığınız her şey tek bir gönderiye sığabilir.
teşekkür etmek!
 

Merhaba! Aşağıdaki algoritmaya göre bir kar alma izi tanıttım:

if(toplam>0)
{for (int i=SiparişlerToplam()-1; i>=0; i--)
if( OrderSelect (i,SELECT_BY_POS)==true)
{
if(OrderMagicNumber()==magic && OrderSymbol()==varlık && OrderType()==OP_BUY)
{
Yeniler();
if(TimeCurrent()>OrderOpenTime() && TimeCurrent()<=(OrderOpenTime()+3600))
{
TAKEPROFIT İZ DURUMU;
YENİ TAKEPROFIT SİPARİŞİNİN DEĞİŞİKLİĞİ;
}
}
}
}

ancak bir nedenden dolayı zaman sınırı çalışmaz ve mevcut zaman diliminde pozisyon kapatılmazsa, koşulların yerine getirilmesi şartıyla bir sonrakinde takip eder.

Son if() ile yanlış olan ne?

 
владимир :

Merhaba! Aşağıdaki algoritmaya göre bir kar alma izi tanıttım:

if(toplam>0)
{for (int i=SiparişlerToplam()-1; i>=0; i--)
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderMagicNumber()==magic && OrderSymbol()==varlık && OrderType()==OP_BUY)
{
Yeniler();
if(TimeCurrent()>OrderOpenTime() && TimeCurrent()<=(OrderOpenTime()+3600))
{
TAKEPROFIT İZ DURUMU;
YENİ TAKEPROFIT SİPARİŞİNİN DEĞİŞTİRİLMESİ;
}
}
}
}

ancak bir nedenden dolayı zaman sınırı çalışmaz ve mevcut zaman diliminde pozisyon kapatılmazsa, koşulların yerine getirilmesi şartıyla bir sonrakinde takip eder.

Son if() ile yanlış olan ne?

Şey, bilmiyorum, orada neyin yanlış olduğunu henüz üstünkörü bir bakışla göremiyorum. Emir sayısı için fazladan bir kontrol kaldırıldı (döngü koşullarında zaten var) ve her iki pozisyon türü için bir kontrol eklendi (Al ve Sat)

//+------------------------------------------------------------------+
for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--) {
   if ( OrderSelect (i, SELECT_BY_POS )) {
       if ( OrderType ()> OP_SELL ) continue ;
       if ( OrderMagicNumber ()==magic && OrderSymbol ()==asset) {
         if ( TimeCurrent ()> OrderOpenTime () && TimeCurrent ()<= OrderOpenTime ()+ PeriodSeconds ( PERIOD_H1 )) {
             // УСЛОВИЕ ТРАЛА ТЭЙКПРОФИТА;
             // МОДИФИКАЦИЯ ОРДЕРА НА НОВЫЙ ТЭЙКПРОФИТ;
            }
         }
      }
   }
//+------------------------------------------------------------------+

// Sondaki ve değiştirme koşullarının olduğu yerde, zaman değişkenlerinin değerleriyle Print() öğesini ekleyin ve günlükte ne yazılacağını görün.

 
Artyom Trishkin :

Şey, bilmiyorum, şu anda orada neyin yanlış olduğunu göremiyorum.Emir sayısı için fazladan bir kontrol kaldırıldı (döngü koşullarında zaten var) ve her iki pozisyon türü için bir kontrol eklendi (Al ve Sat)

//+------------------------------------------------------------------+
for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--) {
   if ( OrderSelect (i, SELECT_BY_POS )) {
       if ( OrderType ()> OP_SELL ) continue ;
       if ( OrderMagicNumber ()==magic && OrderSymbol ()==asset) {
         if ( TimeCurrent ()> OrderOpenTime () && TimeCurrent ()<= OrderOpenTime ()+ PeriodSeconds ( PERIOD_H1 )) {
             // УСЛОВИЕ ТРАЛА ТЭЙКПРОФИТА;
             // МОДИФИКАЦИЯ ОРДЕРА НА НОВЫЙ ТЭЙКПРОФИТ;
            }
         }
      }
   }
//+------------------------------------------------------------------+

// Sondaki ve değiştirme koşullarının olduğu yerde, zaman değişkenlerinin değerleriyle Print() öğesini ekleyin ve günlükte ne yazılacağını görün.

CELL için farklı iz koşullarım var, bu yüzden sadece SATIN AL gösterdim.

"zaman değişkenlerinin değerleriyle" - TimeCurrent()'i mi kastediyorsunuz? Bu sizi şaşırttıysa özür dilerim - Programlamada eksi ile sıfırım.

Ve bunu anlamadım - OrderType ()> OP_SELL. Neden >? OP_SELL işlem tipi = 1 ve OP_BUY = 0 değerine sahiptir. Bu nedenle <= ? Teşekkür ederim.

 
владимир :

CELL için farklı iz koşullarım var, bu yüzden sadece SATIN AL gösterdim.

"zaman değişkenlerinin değerleriyle" - TimeCurrent()'i mi kastediyorsunuz? Bu sizi şaşırttıysa özür dilerim - Programlamada eksi ile sıfırım.

Ve bunu anlamadım - OrderType ()> OP_SELL. Neden >? OP_SELL işlem tipi = 1 ve OP_BUY = 0 değerine sahiptir. Bu nedenle <= ? Teşekkür ederim.

Tür 1'den büyükse, döngünün sonraki yinelemesine gidin.
 

Selamlar. Söyle bana, lütfen, neden böyle bir kayıtla

if (x!=maxpr1){x=maxpr1; OrderDelete(biletD);}

if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}

sürekli hata veriyor

: OrderDelete işlevi için geçersiz bilet

: Sipariş Silme hatası 4051

kılavuza göre o

Geçersiz fonksiyon parametre değeri

parametreler aynı gibi görünse de.

Her ne kadar koşulu kaldırsanız ve yalnızca bıraksanız da

OrderDelete(biletD);

OrderDelete(ticketUP);

bu başarıyla siler (ancak bir şartla gereklidir). Neyi yanlış yapıyorum?

 
spoiltboy :

Selamlar. Söyle bana, lütfen, neden böyle bir kayıtla

if (x!=maxpr1){x=maxpr1; OrderDelete(biletD);}

if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}

sürekli hata veriyor

: OrderDelete işlevi için geçersiz bilet

: Sipariş Silme hatası 4051

kılavuza göre o

Geçersiz fonksiyon parametre değeri

parametreler aynı gibi görünse de.

Her ne kadar koşulu kaldırırsanız ve yalnızca bırakırsanız

OrderDelete(biletD);

OrderDelete(ticketUP);

bu başarıyla siler (ancak bir şartla gereklidir). Neyi yanlış yapıyorum?

Hata, kodda, sipariş seçimi alanında daha yüksek bir yerdedir.