Problem mit EA-Code 2 (SL-Manager) - Seite 4

 
diostar:

Ich hoffe, dass dies eine gewisse Hilfe sein kann.

Ursprünglich war meine Symbole 4 Ziffern, alle Trailing-Stops, Stop / Limit Aufträge ändern, ging genau wie erwartet. Dann entschied sich mein Broker, auf Fractional umzustellen. Ich habe die notwendigen Änderungen und sah meine Pips ging wie -3,4, -4,5, 0,1, 4,6, 7,3, etc, etc. Ich dachte, das sei in Ordnung, aber eigentlich nicht: Angenommen, ich setze mein Limit=7, und sagen wir, neue Ticks 1, Ticks 2, Ticks 3 passieren nacheinander:

1) 7.3>Limit, dann wird die Order geändert... Broker füllt 1 Slippage aus...

2) 7.5>Limit, dann wird der Auftrag geändert....Broker füllt 0 Slippage...

3) 7.1>Limit, dann wird die Order geändert...Broker füllt 2 Slippage aus...

Alles in allem werden meine Orders also 3 Mal für alle 3 Ticks modifiziert. Nachdem mir das klar geworden ist, habe ich beschlossen, MathRound() zu verwenden, um diese auf die nächste Ganzzahl zu runden, so dass aus 1,2,3 wird

1) mathround(7.3) =7 >limit, NOT TRUE, nicht geändert

2) mathround(7.5)=8 >limit, TRUE, Reihenfolge wird geändert

3) mathround(7.1)=7>Grenzwert, NICHT WAHR, nicht geändert

Eigentlich arbeite ich immer noch daran, wie man die oben genannten Methoden verbessern kann... bis jetzt funktionieren sie gut, aber ich denke, es muss bessere Methoden geben als meine.


Awesome Diostar, das ist sehr sehr nützliche Informationen für mich tatsächlich, vor allem, dass Bit ich hervorgehoben.

Also, wenn ich mein Problem zu beheben, das Beste, was ich hoffen kann, ist:

jedes Mal, wenn meine Bedingungen an der Lücke 00, 01, 02 usw. erfüllt sind, ist das Beste, was ich hoffen kann, 1, 2, 3 (bzw.) Scroll-Throughs von jedem hey. Bei Gap 03 wird also mein Auftrag 02,01,00, dann 01,00,02 und dann 00,02,01 geändert, bis alle Aufträge geändert sind? Wenn ich sie vorwärts blättere, geschieht dasselbe, aber in anderer Reihenfolge usw...

Ich denke, ich könnte in Ordnung sein, wenn dies tatsächlich passiert... allerdings könnte ich später dasselbe feststellen wie du und es verschärfen wollen, aber ich bin glücklich, eine Brücke nach der anderen in Angriff zu nehmen... Trotzdem danke für den Weitblick!!

Ich bin noch dabei, dieses Forumula auszuprobieren...

 
diese Formel ist auch gut gelaufen, danke für die Unterstützung, Diostar, ich habe mich ewig mit dem Lernen des Codes herumgequält, danke.
 

Wie immer die Art und Weise hey, im Nachhinein zu denken, eine andere Lösung.....

Nur für mein Lernen, würde der unten stehende Block von als eine alternative Work-Around zu meinem Problem vor?


//---------------------------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:


Danke, dass Sie sich die Zeit dafür genommen haben, Diostar. Zu der Zeit hatte ich nicht das Wissen, um überhaupt auf diese Idee zu kommen. Selbst jetzt habe ich es aus ein paar Code-Stücken nachgebaut, da ich immer noch lerne, wie man ARRAYS erstellt...

Ich kann ehrlich gesagt nicht glauben, wie schwer es war, einen Codeabschnitt zu erstellen, der einfach ALLE ORDERS AUSWÄHLT und sie EINMAL MODIFIZIERT... wenn der Datenfluss hier JEDEN TICK gesendet wurde...

Ich bedanke mich für deine Zeit mit deinen Ergänzungen, ich werde sie ausprobieren... Hey Diostar, ich glaube, ich habe das, was du vorher gesagt hast, auch bemerkt, danke für die Voraussicht, damit ich weiß, dass es nicht mein Code war.... Ich sehe, dass ich durch die Modifikationen scrolle (* #Orders, die ich laufen habe), und ich bemerke, dass es zu einem Ausrutscher kommt... ich werde dich auf dem Laufenden halten, wenn ich das Problem umgehen kann, möglicherweise mit dem obigen Code als Anfang, um ehrlich zu sein, nochmals danke ;)

 
Funky:


Danke, dass Sie sich die Zeit dafür genommen haben, Diostar. Zu der Zeit hatte ich nicht das Wissen, um überhaupt auf diese Idee zu kommen. Selbst jetzt habe ich es aus ein paar Code-Stücken nachgebaut, da ich immer noch lerne, wie man ARRAYS erstellt...

Ich kann ehrlich gesagt nicht glauben, wie schwer es war, einen Codeabschnitt zu erstellen, der einfach ALLE ORDERS AUSWÄHLT und sie EINMAL MODIFIZIERT... wenn der Datenfluss hier JEDEN TICK gesendet wurde...

Ich bedanke mich für deine Zeit mit deinen Ergänzungen, ich werde sie ausprobieren... Hey Diostar, ich glaube, ich habe das, was du vorher gesagt hast, auch bemerkt, danke für die Voraussicht, damit ich weiß, dass es nicht mein Code war.... Ich sehe, dass ich durch die Modifikationen scrolle (* #Orders, die ich laufen habe), und ich bemerke, dass es zu einem Ausrutscher kommt... ich werde dich auf dem Laufenden halten, wenn ich das Problem umgehen kann, möglicherweise mit dem obigen Code als Anfang, um ehrlich zu sein, nochmals danke ;)

Sie sind willkommen. Slippage, genau wie der Spread, tun off-Quote das Ergebnis in jeder Änderung Preis, sl, tp. Aber ich immer ordersend() mit Slippage Null, noch. Es kann gut sein, 1,2 Punkte zu haben, aber so weit, so gut.

Grund der Beschwerde: