[Arşivle!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 2. - sayfa 29

 

Merhaba...

Bir danışman yazdım , ancak böyle bir sorunla karşılaştım:

Zıt emirlerim var ve örneğin, AL için 150 puanlık bir stopum ve 150 puanlık bir karım var, SAT için aynı seviyeler belirlendi, ancak sadece tersine çevrildi (yani, satın alma karı için olan, sonra satış durdurma için olan), yani. Aslında benim için her şey aynı anda kapalı olmalı, hem aldan sat hem de sattan al ..... ama burada özellik farklı, spread!))) Ve kalan 8 emir bunlardan açıldı zaten iki zıt düzen (tabii ki, sekizinin hepsine ihtiyaç duyulmadıkça, onlar için şartlar farklı, onlar da 4/4'ün tam tersi)


Aynı fiyata aynı anda ulaşıldığında her şeyin kapanması için kod nasıl doğru şekilde programlanır? Çünkü test cihazında test ettiğimde fiyat bazen istenilen seviyeye geliyor, örneğin satış kapanıyor (belirlenen seviyeye ulaşmıyor, bunun bir spread olduğunu düşünüyorum) ve satın alma kilitleniyor ve kısa bir süre sonra düşüyor ve satın alma zaten stop ile kapanıyor, bu yüzden doğru sonucu göremiyorum.


Fikrinizi programlı olarak ifade ederseniz minnettar olacağım, yani. kod.


Daha detaylı anlamak için iki zıt (ilk) emrimin ne zaman açıldığı kısmını veriyorum.

 if (by == FALSE) 
   {   g_ticket_112 = OrderSend ( Symbol (), OP_BUY, Lots, NormalizeDouble (Ask, Digits ), 1 , NormalizeDouble (Ask - SL * Point , Digits ), 
       NormalizeDouble (Ask + TP * Point , Digits ), "" , 111 , 0 , Blue );
   if (g_ticket_112 > 0 ) by = TRUE;
   } 
     
     if (se == false) 
   { for (g_pos_116 = OrdersTotal () - 1 ; g_pos_116 >= 0 ; g_pos_116--) 
   { if ( OrderSelect (g_pos_116, SELECT_BY_POS, MODE_TRADES)) 
   { if (OrderSymbol() != Symbol () || OrderMagicNumber() != 111 ) continue ;
     if (se == false) 
   {g_ticket_113 = OrderSend ( Symbol (), OP_SELL, Lots, NormalizeDouble (Bid, Digits ), 1 , 
    OrderTakeProfit(),OrderStopLoss() , "" , 222 , 0 , Blue );
     if (g_ticket_113 > 0 ) se = TRUE;}}}} 
 
Programı tüm hafta sonları için uzatan bir senaryosu olan çocuklar, yani program Pazartesi'nin başlangıcıyla aynı kalmasın, ancak boş günler Cumartesi ve Pazar olarak kalır.
 

Merhaba.

Soru, yeni bir çubuk açma gerçeğini (hangi zaman dilimi olursa olsun) belirleyen bir işleve kimin sahip olabileceği veya daha doğrusu yeni bir çubuk bulmak için farklı seçenekler (ilkeler) olduğudur.

 
dmitriy086 :

Merhaba.

Soru, yeni bir çubuk açma gerçeğini (hangi zaman dilimi olursa olsun) belirleyen bir işleve kimin sahip olabileceği veya daha doğrusu yeni bir çubuk bulmak için farklı seçenekler (ilkeler) olduğudur.


oldtime = Time[0] zamanını hatırlayın ve hatırlanan zamanı karşılaştırın if( oldtime !=Time[0])Print("Yaşasın yeni çubuk!!!");

Not: fragmanlar iTime () işlevindedir

:)

 
//+------------------------------------------------------------------+
bool fNewBar()
  {
   static datetime NewTime=0;
   if(NewTime!=iTime (Symbol(),0,0))
    {
     if(NewTime==0)
      {
       NewTime=iTime (Symbol(),0,1);return(false);
      }      
     NewTime=iTime (Symbol(),0,0);
     return(true);
    }
   return(false);     
  }
//+----------------------------------------------------------------------------+

IgorM , sorun şu ki, bu işlev sentetik bir grafikte, iTime[0] iTime[1]'e eşit olabilir, peki zaman olmadan nasıl yapılır, böylece EA yeni bir çubukta yalnızca bir ticaret açar?
 
dmitriy086 :
IgorM , sorun şu ki, bu işlev sentetik bir grafikte, iTime[0] iTime[1]'e eşit olabilir, peki zaman olmadan nasıl yapılır, böylece EA yeni bir çubukta yalnızca bir ticaret açar?


0 ve 1 numaralı çubukların zamanı anlaşılmaz bir nedenle benim için aynı hizaya getirilemiyorsa - tarih saat türü verileri saniye cinsinden depolarsa, çubuk zamanını en az 1 saniye değiştirin

sonra ilk kapalı çubuğun tüm özelliklerini ezberlemeye çalışın, yani. OHLC, hacim ve açılma süresi, en az bir parametre değişirse yeni bir çubuk anlamına gelir

Not: iBars() işlevi, mevcut TF'deki çubukların sayısını verecektir ve terminal ayarları ile sınırlandırılacaktır, çubuk sayısını depolanan çubuk sayısıyla karşılaştırmayı deneyebilirsiniz ve o sırada yeni bir çubuk görünüyor, bu değerler farklı, ancak her zaman değil, benim için çalıştı evet, ancak muhtemelen MT4 yapı numarasından bu seçenek çalışmayabilir

 
ve hazır bir kod parçanız yok mu? ve orada kendim OHLC[1]'yi nasıl hatırlayacağımı ve OHLC[0] ile nasıl karşılaştıracağımı çözemiyorum ...
 
dmitriy086 :
ve hazır bir kod parçanız yok mu? ve orada kendim OHLC[1]'yi nasıl hatırlayacağımı ve OHLC[0] ile nasıl karşılaştıracağımı çözemiyorum ...


OHLC, Open, High, Low, Close için ortak bir kısaltmadır.

sıfırla değil, daha önce ezberlenen ilkiyle karşılaştırın, yani.

içinde(){

eskiYüksek = Yüksek[1];

///

}

Başlat(){

çift tmp = yüksek[1];

if(tmp !=eskiYüksek) { eskiYüksek = tmp;

//diğer bar parametrelerini kontrol et

}

}

 

Bahşiş için teşekkürler, bakacağım...

 

Bu enstrüman için açık bir pozisyon olup olmadığına dair bir pozisyon açma koşulunda bir kontrolün nasıl doğru bir şekilde ayarlanacağını söyleyin. Ve enstrüman için bir pozisyon varsa (herhangi bir satış veya alım), açılış gerçekleşmez, aksi takdirde açma sinyali işlenir mi?

İşte kod (pozları açmaktan sorumlu olduğunu düşünüyorum):

 if (NumberOfPositions( "" ,- 1 ,Magic)>= 2 )  флаг 1 = 1 ; //если число позиций >= 2
if (NumberOfPositions( "" ,- 1 ,Magic)< 1 )  флаг 1 = 0 ; //если нет откр. позиций
if ( TradeDOWN==true && флаг 1 == 0 ) { //если условия соответствуют заданным  
//продаем 1-й символ и покупаем второй символ
//----------------------------------------
if (NumberOfPositions(Symbol_1,OP_SELL,Magic)< 1 ){ //если нет поз.селл и поз.бай по 1-му символу
 if (NumberOfPositions(Symbol_1,OP_BUY,Magic)< 1 )
 {
 SL= 0 ;TP= 0 ; //открываем позицию, задаем стопы :
if (StopLoss_1> 0 )   SL=Bid_Tiker1+POINT_Tiker1*StopLoss_1;
if (TakeProfit_1> 0 ) TP=Bid_Tiker1-POINT_Tiker1*TakeProfit_1; 
 ti=OpenPosition(Symbol_1, OP_SELL, Lots_1, 0 , 0 ,Magic);
if (StopLoss_1> 0 || TakeProfit_1> 0 ) { //ставим стопы 
if ( OrderSelect (ti, SELECT_BY_TICKET)) ModifyOrder(- 1 , SL, TP, clModifySell);}
                                   }} //если нет поз.селл и поз.бай по 1-му символу
//--------------------------------------
if (NumberOfPositions(Symbol_2,OP_BUY,Magic)< 1 ){ //если нет поз. бай и поз. селл по 2-му символу 
 if (NumberOfPositions(Symbol_2,OP_SELL,Magic)< 1 )
 {
   SL= 0 ;TP= 0 ; //открываем позицию, задаем стопы :
if (StopLoss_2> 0 )   SL=Bid_Tiker2-POINT_Tiker2*StopLoss_2;
if (TakeProfit_2> 0 ) TP=Ask_Tiker2+POINT_Tiker2*TakeProfit_2;   
ti=OpenPosition(Symbol_2, OP_BUY, Lots_2, 0 , 0 ,Magic);
if (StopLoss_2> 0 || TakeProfit_2> 0 ) { //ставим стопы 
if ( OrderSelect (ti, SELECT_BY_TICKET))ModifyOrder(- 1 , SL, TP, clModifyBuy); }
                                   }} //если нет поз. бай и поз. селл по 2-му символу

Mantıken doğru görünüyor, ancak yine de çalışmıyor, bir enstrüman için birkaç poz açıyor.

PS Ben bir programcı değilim. Mümkünse, çaydanlığa daha ayrıntılı olarak açıklayın.

Neden: