EA kodu 2 ile ilgili sorun (SL yöneticisi) - sayfa 4

 
diostar :

Muhtemelen bu biraz yardım sağlayabilir, umarım.

Başlangıçta, sembollerim 4 basamaktı, tüm takip eden duraklar, durdurma/limit emirleri değişti, beklendiği gibi gitti. Sonra brokerim kesirli olmaya karar verdi. Gerekli değişiklikleri yaptım ve piplerimin -3.4, -4.5, 0.1, 4.6, 7.3, vb. gibi gittiğini gördüm. Bunun tamam olduğunu düşündüm ama aslında değil: Diyelim ki limitimi=7 ayarladım ve yeni tik diyelim 1,tık 2,tık3 sırayla gerçekleşir:

1) 7.3>limit, sonra sipariş değiştirilir... komisyoncu 1 kaymayı doldurur...

2) 7.5>limit, sonra sipariş değiştirilir... komisyoncu 0 kayma doldurur...

3) 7.1>limit, sonra sipariş değiştirilir... komisyoncu 2 kaymayı doldurur...

Sonuç olarak, siparişlerimi 3 tik için 3 kez değiştirdim. Bunu fark ettikten sonra, bunları en yakın tam sayıya yuvarlamak için MathRound() kullanmaya karar verdim, böylece 1,2,3 olur

1) matround(7.3) =7 >limit, DOĞRU DEĞİL, değiştirilmedi

2) Mathround(7.5)=8 >limit, DOĞRU, sıra değiştirildi

3) mathround(7.1)=7>limit, DOĞRU DEĞİL, değiştirilmedi

Aslında hala yukarıdakileri nasıl geliştireceğim üzerinde çalışıyorum... şu ana kadar iyi çalışıyorlar, ama benimkinden daha iyi yollar olması gerektiğini düşünüyorum.


Müthiş Diostar, bu benim için gerçekten çok faydalı bir bilgi, özellikle altını çizdiğim kısım.

Yani sorunumu çözersem, umabileceğim en iyi şey:

00, 01, 02 vb. boşlukta koşullarım her karşılandığında, umut edebileceğim en iyi şey her bir hey için 1,2,3 (sırasıyla) kaydırma düşünceleridir. Yani boşluk 03'te tüm siparişler değiştirilene kadar siparişimi 02,01,00, ardından 01,00,002 ve 00,02,01 değiştirecek mi? Onları ileri kaydırırsam aynı şeyi, ancak farklı sırayı vb.

Sanırım bu gerçekten olursa iyi olabilirim... ancak daha sonra senin gibi bir şey bulabilir ve sıkmak isteyebilirim, ama her seferinde bir köprüyü geçmekten mutluyum.. Yine de öngörü için teşekkürler!!

hala bu forumu denemek üzere...

 
Bu formül de iyi gitti, oradaki destek için teşekkürler Diostar, yıllardır kodu öğrenerek kuyruğumu kovalıyordum, teşekkürler..
 

Her zaman olduğu gibi hey, geriye dönüp farklı bir çözüm düşünmek için .....

Sadece öğrenmem için, aşağıdaki blok daha önce sorunuma alternatif bir çözüm olarak işe yarar mıydı?


 //---------------------------old attempt where it spammed modifies--------------------------------------
//---------------------------I got around this problem another way before-------------------------------
void ModifySellBlock()
{
     for ( int i= OrdersTotal ()- 1 ; i >= 0 ; i--)
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
    {
         if ( OrderType () == OP_SELL && OrderSymbol () == Symbol () && OrderMagicNumber () == SELL_Magic01)
        { 
             double Level_00_SL = Bid + Stoploss_Level_00*PipValue* Point ;
             if (Stoploss_Level_00 == 0 ) Level_00_SL = 0 ;
             double Level_00_TP = Bid - Takeprofit_Level_00*PipValue* Point ;
             if (Takeprofit_Level_00 == 0 ) Level_00_TP = 0 ;
             bool ret00 = OrderModify ( OrderTicket (), OrderOpenPrice (), Level_00_SL, Level_00_TP, 0 , Modify_Order_Colour);
             if (ret00 == false)
             Print ( "OrderModify() error - " , ErrorDescription( GetLastError ()));
        }
    }
    
}

//-----------------------------however I am wondering now that I have fixed it------------------
//------------------------------would this of worked below?-------------------------------------

void ModifySellBlock()
{
     int orderstotal = OrdersTotal ();
     int orders = 0 ;
     int ordticket[ 30 ][ 2 ];
     for ( int i = 0 ; i < orderstotal; i++)
    {
         OrderSelect (i, SELECT_BY_POS, MODE_TRADES);
         if ( OrderType () != OP_SELL || OrderSymbol () != Symbol () || OrderMagicNumber () != 1 )
        {
             continue ;
        }
        ordticket[orders][ 0 ] = OrderOpenTime ();
        ordticket[orders][ 1 ] = OrderTicket ();
        orders++;
    }
     if (orders > 1 )
    {
         ArrayResize (ordticket,orders);
         ArraySort (ordticket);
    }
     for (i = 0 ; i < orders; i++)
    {
         if ( OrderSelect (ordticket[i][ 1 ], SELECT_BY_TICKET) == true)
        {
             double Level_00_SL = Bid + Stoploss_Level_00*PipValue* Point ;
             if (Stoploss_Level_00 == 0 ) Level_00_SL = 0 ;
             double Level_00_TP = Bid - Takeprofit_Level_00*PipValue* Point ;
             if (Takeprofit_Level_00 == 0 ) Level_00_TP = 0 ;
             bool ret00 = OrderModify ( OrderTicket (), OrderOpenPrice (), Level_00_SL, Level_00_TP, 0 , Modify_Order_Colour);
             if (ret00 == false)
             Print ( "OrderModify() error - " , ErrorDescription( GetLastError ()));
        }
    }
    
}

//--------------------------any problems with this block?----------------------------------------------
 
 
//-----------------------------however I am wondering now that I have fixed it------------------
//------------------------------would this of worked below?-------------------------------------

void ModifySellBlock()
{
    int orderstotal = OrdersTotal();
    int orders = 0;
    int ordticket[30][2];<-----then, arrayinitialize
    
    for (int i = 0; i < orderstotal; i++)
    {
        OrderSelect(i, SELECT_BY_POS, MODE_TRADES);<-----if(orderselect...

        if (OrderType() != OP_SELL || OrderSymbol() != Symbol() || OrderMagicNumber() != 1)
        {
            continue;
        }
        ordticket[orders][0] = OrderOpenTime();
        ordticket[orders][1] = OrderTicket();
        orders++;
    }
    if (orders > 1)<----orders >0
    {
        ArrayResize(ordticket,orders);
        ArraySort(ordticket);
    }
    for (i = 0; i < orders; i++)
    {
        if (OrderSelect(ordticket[i][1], SELECT_BY_TICKET) == true)<---if (OrderSelect(ordticket[i][1], SELECT_BY_TICKET)

        {
            double Level_00_SL = Bid + Stoploss_Level_00*PipValue*Point;
            if (Stoploss_Level_00 == 0) Level_00_SL = 0;
            double Level_00_TP = Bid - Takeprofit_Level_00*PipValue*Point;
            if (Takeprofit_Level_00 == 0) Level_00_TP = 0;      
         
            can consider if(SL>0 || TP>0){
          
            bool ret00 = OrderModify(OrderTicket(), OrderOpenPrice(), Level_00_SL, Level_00_TP, 0, Modify_Order_Colour);
            if (ret00 == false)
            Print("OrderModify() error - ", ErrorDescription(GetLastError()));
        }
    }
    
}
 
diostar :


Diostar'a ayırdığınız zaman için teşekkürler. O zamanlar, bu fikri ortaya atacak bilgiye bile sahip değildim. Şimdi bile, dizileri nasıl yapacağımı öğrendiğim için birkaç kod parçasından yeniden düzenledim ...

Dürüst olmak gerekirse, TÜM SİPARİŞLERİ SEÇEN VE BUNLARI BİR KEZ DEĞİŞTİREN bir kod bölümü yapmanın ne kadar zor olduğuna inanamıyorum... eğer veri akışı buraya EVERYTICK gönderilmişse...

Eklemelerin için zaman ayırdığın için teşekkür ederim, onlara bir şans vereceğim... Hey ayrıca Diostar, sanırım daha önce ne dediğini fark ettim, öngörü için teşekkürler, bu yüzden benim kodum olmadığını biliyorum.... Biliyorum. değişiklikler arasında gezinmeye bakın (* #siparişlerim var) ve kaymanın geldiğini fark ettim... ;)

 
Funky :


Diostar'a ayırdığınız zaman için teşekkürler. O zamanlar, bu fikri ortaya atacak bilgiye bile sahip değildim. Şimdi bile, dizileri nasıl yapacağımı öğrendiğim için birkaç kod parçasından yeniden düzenledim ...

Dürüst olmak gerekirse, TÜM SİPARİŞLERİ SEÇEN VE BUNLARI BİR KEZ DEĞİŞTİREN bir kod bölümü yapmanın ne kadar zor olduğuna inanamıyorum... eğer veri akışı buraya EVERYTICK gönderilmişse...

Eklemelerin için zaman ayırdığın için teşekkür ederim, onlara bir şans vereceğim... Hey ayrıca Diostar, sanırım daha önce ne dediğini fark ettim, öngörü için teşekkürler, bu yüzden benim kodum olmadığını biliyorum.... Biliyorum. değişiklikler arasında gezinmeye bakın (* #siparişlerim var) ve kaymanın geldiğini fark ettim... ;)

Hoşgeldin. Kayma, tıpkı yayılma gibi, sonucu herhangi bir değişiklik fiyatında, sl, tp'de alıntılamaz. Ama ben her zaman hala sıfır kayma ile sipariş verdim(). 1,2 puan almak iyi olabilir ama şu ana kadar çok iyi.

Neden: