Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 78

 
Lütfen sırayla cevaplayınız. Histogram tarafından görüntülenen bir göstergem var. Katılırken veya yeniden bağlandıktan sonra, daha düşük bir değer gösterir. Dizinin 0. hücresini sıfırlamak için ilk başlangıçtaki koşulu ayarlayın. Ve bir internete koyun - yardımcı olmadı. Başlangıçta sıfırladım - norm. (katılmakla ilgili). ağ kesintisi hakkında. başlangıçta bir koşul belirleyin: if( GetLastError()==6 )zas[0]=0.0; - Yardımcı olmuyor. Sorunun sıradanlığının kokusunu alıyorum, ama ben kendim kayboldum - görünüşe göre bilgi boşluğu.
 
dikson1976-1 :
Lütfen sırayla cevaplayınız. Histogram tarafından görüntülenen bir göstergem var. Katılırken veya yeniden bağlandıktan sonra, daha düşük bir değer gösterir. İlk başlangıçtaki koşulu dizinin 0. hücresini sıfırlayacak şekilde ayarladım. Ve bir internete koyun - yardımcı olmadı. Başlangıçta sıfırladım - norm. (katılmakla ilgili). ağ kesintisi hakkında. başlangıçta bir koşul belirleyin: if(GetLastError()==6)zas[0]=0.0; - Yardımcı olmuyor. Sorunun sıradanlığının kokusunu alıyorum, ama ben kendim kayboldum - görünüşe göre bilgi boşluğu.

Kod yok, yol yok.
 

Dozol :



Siparişleri ters sırayla incelemeyi deneyin.

 for (i= OrdersTotal ()- 1 ;i>= 0 ;i--)
      {
       OrderSelect (i,SELECT_BY_POS,MODE_TRADES);
         {
     // и тд
         }
       }
 
Kendim yönettim. stres yapma. Herkese teşekkürler.
 
Dozol :

Arkadaşlar yardım edin. Seçilen döviz çifti için tüm siparişleri kapatmam gerekiyor. İşte yazdıklarım (EA kodunun bir parçası):

int Zakrit_vse() ...

Foruma kod yerleştirmek için SRC'yi kullanın

Kodu yazarken zaten anladınız, ama o zamandan beri Kodu ekledim, buraya göndereceğim, belki kendin için ilginç bir şey bulursun:

 int Zakrit_vse()
{  
if ( OrdersTotal ()> 0 )
{   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
   {   if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
      {   if (OrderSymbol()!= Symbol ()) continue ;
      
         //--- Close pending orders
         if (OrderType()==OP_BUYLIMIT  ||
             OrderType()==OP_BUYSTOP   ||
             OrderType()==OP_SELLLIMIT ||
             OrderType()==OP_SELLSTOP)         
         {  
            OrderDelete(OrderTicket(), CLR_NONE )
            Prov_oshibok();
             return ( 0 );
         }
         
         //--- Close opened position BUY
         if (OrderType()==OP_BUY)
         {
            RefreshRates();
            OrderClose(OrderTicket(),OrderLots(),Bid, 100 , CLR_NONE );
            Prov_oshibok();
             return ( 0 );
         }
         //--- Close opened position SELL
         if (OrderType()==OP_SELL)
         {
            RefreshRates();
            OrderClose(OrderTicket(),OrderLots(),Ask, 100 , CLR_NONE );
            Prov_oshibok();
             return ( 0 );
         }
}  }  }
}
 
Dozol :

Arkadaşlar yardım edin. Seçilen döviz çifti için tüm siparişleri kapatmam gerekiyor. İşte yazdıklarım (EA kodunun bir parçası):


Her şey senin için icat edilmişken, tekerleği neden yeniden icat ettin? Örneğin . Bunu unutma .
 

Yardım! Harici kanal göstergesi için bir danışman kodu vardır (kanal üst limitine ulaşıldığında işlem satışa açılır - alt limite ulaşıldığında kapatılır, ters sırada satın alınır). Bilinmeyen sebeplerden dolayı işlem açmıyor, hata bulamıyorum. Başka bir kanal göstergesiyle mükemmel çalışır. Tüm alınan arabellekleri hemen şart koşun.

kodu ekliyorum

harici çift Lot = 0.1;
extern string Comment = "TMA Canal2";
harici int TakeProfit = 20;
harici int StopLoss = 20;
dış int kayma = 2; // kayma
harici int Sihir = 124;

extern string Indi = "Gösterge verileri";
extern string TimeFrame = " geçerli zaman çerçevesi";
extern int TMAPeriod = 56;
extern int Fiyat = PRICE_CLOSE;
harici çift ATRMÇarpan = 2.0;
harici int ATRPeriyot = 100;
harici çift Trend Eşiği = 0,5;
extern bool ShowCenterLine = yanlış;

çift FiyatYüksek, FiyatDüşük, SL, TP;
int bileti;

//+------------------------------------------- --------------------+
//| uzman başlatma işlevi |
//+------------------------------------------- --------------------+
int init()
{
if (Rakamlar ==3 || Rakamlar ==3) // beş basamaklı bir komisyoncu için
{
Kâr Al *= 10;
StopLoss *= 10;
kayma *= 10;
}
dönüş(0);
}

//+------------------------------------------- --------------------+
//| Açık pozisyonları hesaplayın |
//+------------------------------------------- --------------------+
int CalculateCurrentOrders(dize sembolü)
{
int satın alır = 0, satar = 0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==yanlış) ara;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==124)
{
if(OrderType()==OP_BUY) satın alır++;
if(OrderType()==OP_SEL) satıyor++;
}
}
//---- iade sipariş hacmi
if(satın alır>0) iade(satın alır);
başka iade(-satış);
}

//+------------------------------------------- --------------------+
//| Açık sipariş koşullarını kontrol edin |
//+------------------------------------------- --------------------+
geçersiz CheckForOpen()
{
çift FiyatYüksek, FiyatDüşük;
int bileti;
//---- sadece yeni çubuğun ilk tikleriyle işlem yap
if(Volume[0]>1) dönüşü;

PriceHigh = iCustom(Symbol(), 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPperiod, TrendThreshold, ShowCenterLine, 1, 0);
PriceLow = iCustom(Symbol(), 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPperiod, TrendThreshold, ShowCenterLine, 2, 0);


if(Open[1]>PriceHigh || Close[1]>PriceHigh || High[1]>PriceHigh && Ask<=PriceHigh)

{
bilet=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"TMA Canal2",124,0,Kırmızı);
dönüş;
}
//---- satın alma koşulları
if(Open[1]<FiyatDüşük || Kapat[1]<FiyatDüşük || Düşük[1]<FiyatDüşük && Teklif>=FiyatDüşük)

{
bilet=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"TMA Canal2",124,0,Mavi);
dönüş;
}
//----
}
//+------------------------------------------- --------------------+
//| Yakın sipariş koşullarını kontrol edin |
//+------------------------------------------- --------------------+
geçersiz CheckForClose()
{
çift FiyatYüksek, FiyatDüşük;
//---- sadece yeni çubuğun ilk tikleriyle işlem yap
if(Volume[0]>1) dönüşü;

PriceHigh = iCustom(Symbol(), 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPperiod, TrendThreshold, ShowCenterLine, 1, 0);
PriceLow = iCustom(Symbol(), 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPperiod, TrendThreshold, ShowCenterLine, 2, 0);

for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==yanlış) ara;
if(OrderMagicNumber()!=124 || OrderSymbol()!=Symbol()) devam ediyor;
//---- sipariş tipini kontrol et
if(OrderType()==OP_BUY)
{
if(Open[1]>PriceHigh || Close[1]>PriceHigh || High[1]>PriceHigh) OrderClose(OrderTicket(),OrderLots(),Bid,3,Beyaz);
kırmak;
}
if(OrderType()==OP_SEL)
{
if(Open[1]<FiyatDüşük || Kapat[1]<FiyatDüşük || Düşük[1]<FiyatDüşük) OrderClose(OrderTicket(),OrderLots(),Ask,3,Beyaz);
kırmak;
}
}
//----
}

//+------------------------------------------- --------------------+
//| başlatma işlevi |
//+------------------------------------------- --------------------+
geçersiz başlangıç()
{
//---- geçmişi ve ticareti kontrol et
if(Bars<100 || IsTradeAllowed()==yanlış) dönüş;
//---- açık siparişleri mevcut sembole göre hesapla
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
başka CheckForClose();
//----
}
//+------------------------------------------- --------------------+

 
ZahvatkiN :

Tüm sevgili programcılara selamlar, mql4'te yeniyim, SL ve TP ile nasıl çalışılacağını biliyorum fakat indikatörün zıt sinyalinde emirleri kapatmak zorunda kalınca bir sorun çıktı, OrderSelect'i anlamadım( ) sipariş sayma işlevi çalışıyor, işte Stokastik'e göre çalışan basit bir Uzman Danışman kodunun bir parçası, yani. aşırı satım ve 1. ve 2. çubuklar arasında geçiş, bir alış açın, sonra aşırı alış ve çapraz, bir alışı kapatın ve hemen bir satış açın, vb. Emirleri sıralamak için bir döngü kullanıldığını biliyorum, kodda var, ancak ticaret sürecinde ortaya çıkıyor, bu yüzden emir yeni açıldı ve hemen kapanıyor. bir satın alma açma koşulları, bir satışı kapatma koşullarıyla örtüşüyor ve ona bunun gerekli olmadığını nasıl açıklayacağımı anlamıyorum, lütfen açıklayın.

Kodu eklemek için SRC düğmesini kullanın!

Yazdığınız gibi, ayrıca Documentation'ı kullanarak eklemeler yapın!

Eğer kopyaladıysanız, revizyonlar için veya Çalışma'da lütfen Yazar ile iletişime geçin!

 


Tekrar ekleyeceğim. Pekala, kaç kez söylendi, kodu girin, üst satırdaki düğmeyi kullanın.

Ve kod yazma stillerine bağlı kalmak arzu edilir .... Arzu edilir, ancak gerekli değildir. Ancak en kolay anlaşılır kod büyük olasılıkla cevaplanacaktır.

 

Tüm sevgili programcılara selamlar, mql4'te yeniyim SL ve TP ile nasıl çalışılacağını biliyorum fakat indikatörün zıt sinyalinde emirleri kapatmak zorunda kalınca bir sorun çıktı, nasıl olduğunu anlayamıyorum. OrderSelect() sipariş sayma işlevi çalışır, burada Stokastik'e göre çalışan basit bir Uzman Danışman kodunun bir kısmı, yani. aşırı satım ve 1. ve 2. çubuklar arasında geçiş, bir alış açın, sonra aşırı alış ve çapraz, bir alışı kapatın ve hemen bir satış açın, vb. Emirleri sıralamak için bir döngü kullanıldığını biliyorum, kodda var, ancak ticaret sürecinde ortaya çıkıyor, bu yüzden emir yeni açıldı ve hemen kapanıyor. bir satın alma açma koşulları, bir satışı kapatma koşullarıyla örtüşüyor ve bunun yapılmaması gerektiğini ona nasıl açıklayacağımı anlamıyorum, lütfen açıklayın.

borilunad ipucu için teşekkürler, yeniden yaptım, sonra çöp atmamak için alıntı ile mesajı da silebilirsiniz.

 if (buy1sOpen())
         {
         OrderSend ( Symbol (), OP_BUY, lots, Ask, Slippage, 0 , 0 , "" , magic, 0 , Blue);
         }
       if (sell1sOpen()) 
         {
         OrderSend ( Symbol (), OP_SELL, lots, Bid, Slippage, 0 , 0 , "" , magic, 0 , Red);
         }
         
       for ( int i= 0 ; i< OrdersTotal (); i++)
         {
         OrderSelect (i,SELECT_BY_POS);
         if (buy1sClose()) 
           {
           OrderClose(i, lots, Ask, Slippage, Blue);
           }
         if (sell1sClose()) 
           {
           OrderClose(i, lots, Bid, Slippage, Red);
           }
         }
         
      }
   }
bool buy1sOpen()
   {
   Sm1= iStochastic ( NULL , 0 , 13 , 5 , 5 , MODE_SMA , 0 ,MODE_MAIN, 1 );
   Ss1= iStochastic ( NULL , 0 , 13 , 5 , 5 , MODE_SMA , 0 ,MODE_SIGNAL, 1 );
   Sm2= iStochastic ( NULL , 0 , 13 , 5 , 5 , MODE_SMA , 0 ,MODE_MAIN, 2 );
   Ss2= iStochastic ( NULL , 0 , 13 , 5 , 5 , MODE_SMA , 0 ,MODE_SIGNAL, 2 );
   if (Sm1>Ss1 && Sm2<Ss2 && Sm1< 30 )
       return ( true );
       return ( false );
   }
bool sell1sOpen()
   {
   Sm1= iStochastic ( NULL , 0 , 13 , 5 , 5 , MODE_SMA , 0 ,MODE_MAIN, 1 );
   Ss1= iStochastic ( NULL , 0 , 13 , 5 , 5 , MODE_SMA , 0 ,MODE_SIGNAL, 1 );
   Sm2= iStochastic ( NULL , 0 , 13 , 5 , 5 , MODE_SMA , 0 ,MODE_MAIN, 2 );
   Ss2= iStochastic ( NULL , 0 , 13 , 5 , 5 , MODE_SMA , 0 ,MODE_SIGNAL, 2 );
   if (Sm1<Ss1 && Sm2>Ss2 && Sm1> 70 )
       return ( true );
       return ( false );
   }
bool buy1sClose()
   {
   Sm1= iStochastic ( NULL , 0 , 13 , 5 , 5 , MODE_SMA , 0 ,MODE_MAIN, 1 );
   Ss1= iStochastic ( NULL , 0 , 13 , 5 , 5 , MODE_SMA , 0 ,MODE_SIGNAL, 1 );
   Sm2= iStochastic ( NULL , 0 , 13 , 5 , 5 , MODE_SMA , 0 ,MODE_MAIN, 2 );
   Ss2= iStochastic ( NULL , 0 , 13 , 5 , 5 , MODE_SMA , 0 ,MODE_SIGNAL, 2 );
   if (Sm1<Ss1 && Sm2>Ss2 && Sm1> 70 )
       return ( true );
       return ( false );
   }
bool sell1sClose()
   {
   Sm1= iStochastic ( NULL , 0 , 13 , 5 , 5 , MODE_SMA , 0 ,MODE_MAIN, 1 );
   Ss1= iStochastic ( NULL , 0 , 13 , 5 , 5 , MODE_SMA , 0 ,MODE_SIGNAL, 1 );
   Sm2= iStochastic ( NULL , 0 , 13 , 5 , 5 , MODE_SMA , 0 ,MODE_MAIN, 2 );
   Ss2= iStochastic ( NULL , 0 , 13 , 5 , 5 , MODE_SMA , 0 ,MODE_SIGNAL, 2 );
   if (Sm1>Ss1 && Sm2<Ss2 && Sm1< 30 )
       return ( true );
       return ( false );
   }
Neden: