[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 5. - sayfa 118

 
Shixan :

Tünaydın.

a=true ve b=true koşullarında bekleyen iki emir (BuyStop ve SellStop) açmak için bir kod yazdım ve bir süre sonra danışman ikinci bir sinyal görünene kadar her iki emri de kapatır, ancak bazen danışman 2 bekleyen emir açar aynı yön. Bu neden oluyor ve bu "hata" nasıl önlenir?



if (a=true && b=true)
{
int OrderCount = OrdersTotal();
if (OrderCount>1) return(0);
bilet1=OrderSend(Symbol(), OP_BUYSTOP, getLot(), PriceOpen_Buy, kayma, PriceOpen_Sell,0,0,Green);
uyku(1000);

bilet2=OrderSend(Symbol(), OP_SELLSTOP, getLot(), PriceOpen_Sell, kayma, PriceOpen_Buy,0,0,Green);

Uyku(1000*59*Zaman Çerçevesi);

for (int i=OrdersTotal()-1; i>=0; i--)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if (OrderType()==OP_BUYSTOP ) OrderDelete(OrderTicket());
if (OrderType()==OP_SELLSTOP ) OrderDelete(OrderTicket());
if (OrderType()==OP_SELL ) OrderClose(OrderTicket(),OrderLots(),Ask,slippage);
if (OrderType()==OP_BUY ) OrderClose(OrderTicket(),OrderLots(),Bid,slippage);
}

dönüş(0);

}


Lütfen bana söyle.

Şimdiden teşekkürler

Kodunuza bakmadım ve anlamadım ama... BİR sinyale İKİ veya daha fazla sipariş vermemek için, sipariş vermeden ÖNCE bir kontrol yapın: bu sinyal için önceden verilmiş bir sipariş var mı? Değilse ifşa ederiz, varsa bambu tüttürürüz.
 
mario065 :

Merhaba,

Ayarlarda sabit 1: 1 ölçekli bir grafiğin mümkün olduğunu bir uzmana yazmak mümkün mü?

Mümkünse lütfen bana nasıl olduğunu söyleyin.

Şimdiden teşekkürler.

Bu kütüphane olabilir.

Bölüm "3.3. Grafik özelliklerini ayarlama işlevleri" işlevi ServiceSetScaleFix1To1 () .

Kütüphane yalnızca Rusça ve İngilizce yerelleştirmelerle çalışır. Belki seninki de olur.

 
Merhaba, lütfen bana cevap verin, MetaEditor'daki yeni yapı 451'de, derleme yaptığınızda, ikinci ex 4 dosyası mq 4 dosyasının yanındaki uzmanlar klasöründe neden görünmüyor?
 

İşte sipariş açma işlevi:

 //+-------------------------------------------------------------------------------------+
//| Открытие короткой позиции                                                           |
//+-------------------------------------------------------------------------------------+
bool OpenSell( double price)
{
   int ticket = - 1 ;
   double SL = OrderOpenPrice() + i_sl * pt;
   double TP = OrderOpenPrice() - i_tp * pt;
   
   if (price < Bid)
       ticket = OrderSend ( Symbol (), OP_SELLSTOP, 0.1 , ND(price), 3 , 0 , 0 , NULL , i_magic, 0 );
       
   if (ticket > 0 && OrderSelect (ticket, SELECT_BY_TICKET == true ))
   {
       if (i_sl > 0 && OrderStopLoss() == 0 )
      {
         if (!OrderModify(ticket, OrderOpenPrice(), ND(SL), ND(TP), 0 , Red))
         {
             Print ( "Ошибка установки первичного стопа для шортов " , OrderType(), " - " , GetLastError ());
             Print ( "pt = " , pt);
             Print ( "Ask = " , Ask);
             Print ( "Bid = " , Bid);
             Print ( "SL_s = " , OrderOpenPrice() + i_sl * pt);
             Print ( "TP_s = " , OrderOpenPrice() - i_tp * pt);
         }
      }
   }
       return ( true );
}

İşte parametrelerin bir çıktısı:

2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: TP_s = 1.4499
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: SL_s = 1.4519
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: Bid = 1.4513
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: Ask = 1.4515
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: pt = 0.0001
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: Ошибка установки первичного стопа для шортов 5 - 4051
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: OrderModify error 4051
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: invalid takeprofit for OrderModify function
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: open #1 sell stop 0.10 EURUSD at 1.45091 ok

Burada açıkça görülmektedir ki TP ve SL fiyatları sırasıyla alış ve alış fiyatının altında ve üstündedir, yani. her şey doğru. Ancak bazı nedenlerden dolayı, yanlış bir durma nedeniyle bir değişiklik hatası oluşur. Nasıl yani?

 
hoz :

İşte sipariş açma işlevi:

İşte parametrelerin bir çıktısı:

Burada açıkça görülmektedir ki TP ve SL fiyatları sırasıyla alış ve alış fiyatının altında ve üstündedir, yani. her şey doğru. Ancak bazı nedenlerden dolayı, yanlış bir duruş nedeniyle bir değişiklik hatası meydana gelir. Nasıl yani?

Küfürün ne için olduğunu bile okudun mu?

ERR_INVALID_FUNCTION_PARAMVALUE 4051 Geçersiz fonksiyon parametre değeri

Çağrılan fonksiyona geçirilen parametrelere bakın o zaman hiçbir şey net değil o zaman bütün dünya ile ilgileneceğiz efendim...

not. Bekleyen bir sipariş verirken, satır

 if (price < Bid)

tamamen uygun değil. MarketInfo(Symbol(), MODE_STOPLEVEL) içinde belirtilen izin verilen minimum mesafeye uygunluğu kontrol etmeniz gerekir. Hemen gözüme çarpan ilk şey.

İkincisi - siparişin verildiği fiyatı yazdırın. Dur ve Al, Sor ve Bid'e göre değil, sipariş verme fiyatına göre yerleştirilmelidir.

 
Zhunko :

Bu kütüphane olabilir.

Bölüm "3.3. Grafik özelliklerini ayarlama işlevleri" işlevi ServiceSetScaleFix1To1 () .

Kütüphane yalnızca Rusça ve İngilizce yerelleştirmelerle çalışır. Belki seninki de olur.

Teşekkürler Zhunko.
 
artmedia70 :

Küfürün ne için olduğunu bile okudun mu?

ERR_INVALID_FUNCTION_PARAMVALUE 4051 Geçersiz fonksiyon parametre değeri

Çağrılan fonksiyona geçirilen parametrelere bakın işte o zaman hiçbir şey net değil o zaman bütün dünya ile ilgileneceğiz hocam...


Tabii ki okudum ve bu yüzden ilginç oldu. Tüm giriş parametrelerini yazdırdım.

İşte olanlar:

bool OpenSell(double price)
{
   int ticket = -1;
   double SL = OrderOpenPrice() + i_sl * pt;
   double TP = OrderOpenPrice() - i_tp * pt;
   
   if (price < Bid)
       ticket = OrderSend(Symbol(), OP_SELLSTOP, 0.1, ND(price), 3, 0, 0, NULL, i_magic, 0);
       
   if (ticket > 0 && OrderSelect(ticket, SELECT_BY_TICKET == true))
   {
      if (i_sl > 0 && OrderStopLoss() == 0)
      {
         Print("ND(price) = ", DoubleToStr(ND(price),Digits));
         Print("ND(SL) = ", DoubleToStr(ND(SL),Digits));
         Print("ND(TP) = ", DoubleToStr(ND(TP),Digits));
         Print("ND(OOP) = ", DoubleToStr(ND(OrderOpenPrice()),Digits));
         if (!OrderModify(ticket, ND(OrderOpenPrice()), ND(SL), ND(TP), 0, Red))
         {
            Print ("Ошибка установки первичного стопа для шортов ", OrderType(), " - ", GetLastError());
            Print("pt = ", pt);
            Print("Ask = ", Ask);
            Print("Bid = ", Bid);
            Print("SL_s = ", OrderOpenPrice() + i_sl * pt);
            Print("TP_s = ", OrderOpenPrice() - i_tp * pt);
         }
      }
   }
       return (true);
}

Bu günlükte ne var:

2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: TP_s = 1.4485
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: SL_s = 1.4505
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: Bid = 1.4496
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: Ask = 1.4497
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: pt = 0.0001
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: Ошибка установки первичного стопа для шортов 5 - 4051
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: OrderModify error 4051
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: invalid takeprofit for OrderModify function
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: ND(OOP) = 1.44946
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: ND(TP) = -0.00100
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: ND(SL) = 0.00100
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: ND(price) = 1.44946
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: open #4 sell stop 0.10 EURUSD at 1.44946 ok

Bazı siparişler değiştirilir ve bazıları değiştirilmez. En baştaki ND(TP) , ND(SL) değerleri genellikle nasılsa döndürülür. Niye ya?

Bu arada normalleştirme işlevi benimki:

 //+-------------------------------------------------------------------------------------+
//| Функция нормализации                                                                |
//+-------------------------------------------------------------------------------------+
double ND( double A)
{
   return ( NormalizeDouble (A, Digits ));
}
 
artmedia70 :

Küfürün ne için olduğunu bile okudun mu?

ERR_INVALID_FUNCTION_PARAMVALUE 4051 Geçersiz fonksiyon parametre değeri

Çağrılan fonksiyona geçirilen parametrelere bakın işte o zaman hiçbir şey net değil o zaman bütün dünya ile ilgileneceğiz hocam...

not. Bekleyen bir sipariş verirken, satır

 if (price < Bid)

tamamen uygun değil. MarketInfo(Symbol(), MODE_STOPLEVEL) içinde belirtilen izin verilen minimum mesafeye uygunluğu kontrol etmeniz gerekir. Hemen gözüme çarpan ilk şey.



Genellikle, açarken değil, siparişleri değiştirmek için bu tür kontroller gördüm. Sonuçta, bir durak için işten çıkarma fiyatını belirlerken fiyat Sor'dan düşükse, bu bir hata olacaktır, bunu çoktan geçtim. Ve eğer 10pp. dur, o zaman durma seviyesi değerinden açıkça daha yüksektir. Ben kene ticareti yapmıyorum :)
 
artmedia70 :


İkincisi - siparişin verildiği fiyatı yazdırın. Dur ve Al, Sor ve Bid'e göre değil, sipariş verme fiyatına göre yerleştirilmelidir.



Sanırım bu değişiklik için mi? Sonuçta açılışta BID ve ASC bizim için önemli. Yukarıdaki yazıda her şeyi anlattım.
 

Tünaydın,

Uzmanın aynı anda birkaç pencerede çalışmasını sağlamak istiyorum. Ancak her enstrüman için sadece bir sipariş açılabilir. Yani şimdi durum:

int toplam = SiparişlerToplam();

if (toplam<1) {analiz ve poz açma bloğu} else {analiz ve poz kapatma bloğu}

şimdi, aynı anda iki cihaz üzerinde ise, biri açılırken diğerinde çalışma engellenecektir. Bu yüzden şöyle bir şey yazdım:

int toplam = SiparişlerToplam();

int cnt;

if(toplam>0)
{
for(cnt=0;cnt<toplam;cnt++)
{
OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol())
{
Symbol_FLAG = doğru;
}
}
}

if(total<1 || total>0 && Symbol_FLAG == false) {ntposes'u analiz etmek ve açmak için blok}...

ama test cihazında çalışmıyor.

Söyler misin, belki de gerçekleştirilemez bir şeye başladım?