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

 
danil77783 :

Merhaba. Zaman varsa bana yardımcı olabilir misiniz Soru şu ki, danışmana iki göstergenin her sinyali için bir sipariş açmam gerekiyor (belirli bir kombinasyonla bir sinyal veriyorlar) tek kelimeyle, satın alınacak birkaç sipariş olmalı veya göstergelerin sinyallerine göre sırasıyla piyasada satış yapın. Ve piyasada sadece bir emrim var ve o kapanana kadar bir sonraki açılmıyor ...... Emirleri saymakla mı ilgili? Lütfen bana söyle. Gerekirse kodu gönderebilirim.

                Şimdiden teşekkür ederim!

"if (OrdersTotal()==0)...." koşullarını kaldırın - sadece şunu söylerler: girişleri ararız ve yalnızca hiç sipariş olmadığında yeni siparişler açarız.

ve böyle bir koşul olmadan büyük bir yeni paket hemen açılmaz, ek bir koşul bulmanız gerekir. Ve bu zaten stratejinizden: Bir öncekinden T süresi boyunca yenisini açmayın veya çubukları kontrol etmeyin veya emirler arasındaki noktalarda mesafeleri koruyun..

 

Merhaba. Yeni başlayanlara yardım ettiğiniz için büyük bir teşekkürle başlayacağım. Her gün bir yeni başlayana, sonra diğerine ilk temel soruları kendi kendime cevaplayamayacaktım.

Ve soru şu:

Önceden, mql4 biraz farklıyken, olası bir hatayı işledikten sonra aç/kapat/değiştir gibi bir siparişin herhangi bir şekilde işlenmesinin return(0) işlevi tarafından kesintiye uğratılması gerektiğine inanılıyordu; Bu nedenle, test cihazında (her tik ile yöntemle, çerçeve bir dakikadır), aynı anda birkaç açık siparişi mevcut fiyattan kapatmak gerekirse, sırayla test cihazı tarafından kapatıldılar. gerçek resmi biraz bozan her yeni çubuk (bazen oldukça güçlü). Yeni Expert Advisor'da, birkaç siparişi tam olarak bir sinyalde ve hatta kısmen kapatmanız gerekir.

soru: her seferinde geçişi kesmeden hepsini bir döngüde (kısmen kapalı) işlemek mümkün müdür? Test eden kişi çiğneyecek mi? Onlar. hepsini tek bir çubukta kısmen kapatabilir mi?

 
XpeHHukoB :

Merhaba. Yeni başlayanlara yardım ettiğiniz için büyük bir teşekkürle başlayacağım. Her gün bir yeni başlayana, sonra diğerine ilk temel soruları kendi kendime cevaplayamayacaktım.

Ve soru şu:

Önceden, mql4 biraz farklıyken, olası bir hatayı işledikten sonra aç/kapat/değiştir gibi bir siparişin herhangi bir şekilde işlenmesinin return(0) işlevi tarafından kesintiye uğratılması gerektiğine inanılıyordu; Bu nedenle, test cihazında (her tik ile yöntemle, çerçeve bir dakikadır), aynı anda birkaç açık siparişi mevcut fiyattan kapatmak gerekirse, sırayla test cihazı tarafından kapatıldılar. gerçek resmi biraz bozan her yeni çubuk (bazen oldukça güçlü). Yeni Expert Advisor'da, birkaç siparişi tam olarak bir sinyalde ve hatta kısmen kapatmanız gerekir.

soru: her seferinde geçişi kesmeden hepsini bir döngüde (kısmen kapalı) işlemek mümkün müdür? Test eden kişi çiğneyecek mi? Onlar. hepsini tek bir çubukta kısmen kapatabilir mi?

Küçük bir koşul altında sorunsuz olabilir. Kod doğru yazılmalıdır.

 
Seric29 :
2 fonksiyon varsa (muhtemelen aşırı yüklenmiş), örneğin int Funkz(int a) int Funkz(int a, int b, int w) ve daha sonra program derlenirse, hangi fonksiyon daha hızlı çalışacaktır, ilki, bir argüman ya da önemli değil çünkü program zaten bir araya getirildi ve vücutta açıklanan şey ne oluyor, yoksaişlevin argümanları hafızanın ayrıldığı yığını temsil ettiği için hala küçük bir etkisi var mı?

Kodunuzda farklı sayıda argümana sahip aynı ada sahip iki işleve sahipseniz, soru hangisinin daha hızlı çağrılacağı değildir. çünkü bir işlevi çağırdığınızda Funkz() yazmazsınız, argüman sayısını belirtirsiniz. 1'i belirtin, biri çağrılacak, 3'ü belirtin - diğeri.

soru, derleyicinin aynı adı taşıyan bu tür işlevleri çiğneyip çiğneyemeyeceğidir.

Konuşma, anladığım kadarıyla kodla ilgili değil, derlenmiş dosyayla mı ilgili?

 
hmm... Cevabın için teşekkürler, Alexey. çok şey belli oldu.
 
Lütfen yardım edin, puan cinsinden bazı değerlere eşit bir SL'miz var (bu kayıp seviyesidir - kullanıcı tarafından yapılandırılabilen bir parametredir) ve ayrıca günlük en düşük veya en yüksek için bir sembol fiyatımız var - bu ikinci bir kayıp durdurma gibidir ve onlar farklı zaman noktalarında farklı olmak , bir otomatik karşılaştırma işlevine ihtiyacımız var - bundan sonra robot en küçük parametreyle (satın almak için SL veya Ilow - veya satmak için SL -iHign) zararı durdurmayı ayarlayacaktır. istenen sonucu ver, neyin yanlış olduğunu anlayamıyorum ...
   пользовательский параметр - extern int    SL               = 1000;
//---------------------------------------------------------------
bool CheckForStopLossSell()
  {
   double Hign= iHigh ( Symbol (), PERIOD_D1 , 1 );
   double StopLoss= NormalizeDouble (SL* Point , Digits );
   double uroven = StopLoss;
   double OOPS= iLow ( Symbol (), PERIOD_D1 , 1 )-StepOpenOrder* Point ;
   double StopLossS= NormalizeDouble (OOPS+StopLoss, Digits );
   //----------------------------------------
   if (Hign>StopLoss) Alert ( "StopLoss" );
   return bool (StopLossS);
   
   //else
   if (Hign<StopLoss) Alert ( "Hign" );
   return bool (Hign); 
   
   //else
   Alert ( "uroven" );
   return bool (uroven); 
   
  }
//--------------------------------------------------------------
bool CheckForStopLossBuy()
  {
   double LOW= iLow ( Symbol (), PERIOD_D1 , 1 );
   double StopLoss=SL* Point ;
   double uroven = StopLoss;
   double SPREAD = MarketInfo( Symbol (), MODE_SPREAD )* Point ;
   double OOPB = ( iHigh ( Symbol (), PERIOD_D1 , 1 )+SPREAD)+StepOpenOrder* Point ;
   double StopLossB=OOPB-StopLoss;
   //-------------------------------------------
   if (LOW<StopLoss) Alert ( "StopLoss" ); 
   return bool (StopLossB);  
   
   //else
   if (LOW>StopLoss) Alert ( "LOW" ); 
   return bool (LOW);  
   
   //else
   Alert ( "uroven" );
   return bool (uroven);  
   
  }
//---------------------------------------------------------------
 
XpeHHukoB :

Kodunuzda farklı sayıda argümana sahip aynı ada sahip iki işleve sahipseniz, soru hangisinin daha hızlı çağrılacağı değildir. çünkü bir işlevi çağırdığınızda Funkz() yazmazsınız, argüman sayısını belirtirsiniz. 1'i belirtin, biri çağrılacak, 3'ü belirtin - diğeri.

soru, derleyicinin aynı adı taşıyan bu tür işlevleri çiğneyip çiğneyemeyeceğidir.

Konuşma, anladığım kadarıyla kodla ilgili değil, derlenmiş dosyayla mı ilgili?

Ve eğer işlevler farklıysa, o zaman hangisi az veya çok sayıda argümanla daha hızlı çalışacak? Bana öyle geliyor ki, farklı bir miktarla aşırı yükleme de bir yük taşıyor mu yoksa kolaylık sağlamak için mi yapılıyor?

 

#define nasıl doğru yazılır söyler misiniz?

böyle yazıyorum

 #define my_POS    cst_Position.my_Position

Bu tasarımı def olarak değiştirirseniz - her şey çalışır.

my_POS.SelectByTicket(pos_DATA(DATA_TICKET))

Ama sadece my_POS yazdığımda . , bu durumda işlevler listesi noktadan sonra görünmez.

Aynısı

 #define pos_DATA  cst_Position.getPositionData

pos_DATA'dan sonra( ipucu yok.

Neyi yanlış yapıyorum?

 
bool operation= 0 ; for ( int pos= 0 ;pos< OrdersTotal ();pos++)
     { if ( OrderSelect (pos, SELECT_BY_POS) == false )   continue ;
       if ( OrderSymbol()== Symbol ()) break ;}


//=========================================================================================================
if (Hour()>= 2 &&Hour()<= 18 &&operation== 0 ){
if (OPB1== 1 )
   {operation= 1 ; if (operation== 0 &&OrderSymbol()!= Symbol ()|| OrdersTotal ()== 0 )
        { OrderSend ( Symbol (),OP_BUY,lots,Ask, 0 ,Bid-ss* Point ,Ask+T* Point , "My order#" ,mn, 0 ,Green);}}
         if (OrderType()==OP_BUY && OrdersTotal ()== 1 &&OrderMagicNumber()== 8 )
        { OrderSend ( Symbol (),OP_SELLSTOP, 5 *lots,OrderOpenPrice()-(ss-ss/ 4 )* Point , 0 , 0 ,SstopClose, "My order#" , 80 , 0 ,Red);}
       

if (OPS1== 1 )
   {operation= 1 ; if (operation== 0 &&OrderSymbol()!= Symbol ()|| OrdersTotal ()== 0 )        
         { OrderSend ( Symbol (),OP_SELL,lots,Bid, 0 ,Ask+ss* Point ,Bid-T* Point , "My order#" ,mn, 0 ,Red);}}
         if (OrderType()==OP_SELL && OrdersTotal ()== 1 &&OrderMagicNumber()== 8 )
         { OrderSend ( Symbol (),OP_BUYSTOP, 5 *lots,OrderOpenPrice()+(ss-ss/ 4 )* Point , 0 , 0 ,BstopClose, "My order#" , 80 , 0 ,Green);}}



if (OrderMagicNumber()== 80 ){operation= 0 ;
 { for ( int   ii= OrdersTotal ()- 1 ;ii>= 0 ;ii--)
       { OrderSelect (ii, SELECT_BY_POS);
         int   type   = OrderType(); bool result = false ;
         switch (type)
         { case OP_BUYSTOP   : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5 , Red ); //break;
           case OP_SELLSTOP  : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5 , Red ); //break;
         
          result = OrderDelete( OrderTicket() ); //break;
          }}}}

Merhaba sevgili uzmanlar!

Yardım edin lütfen sorunu çözün.

Herhangi bir çifti test ederken, her şey doğru çalışır, ancak diğer para birimleri ile çalışırken, bekleyen emirler verilmez (geçici bir tane ayarlamanız gerekir) ve kar al tetiklendikten sonra kapatılmaz.

Mümkünse, kodu nasıl değiştireceğimi söyleyin:



şimdiden çok teşekkür ederim

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
Dosyalar:
c5k8icfo.png  55 kb
 
Motzaart :

Merhaba sevgili uzmanlar!

Yardım edin lütfen sorunu çözün.

...

Lütfen kodu doğru şekilde yapıştırın:


Neden: