EA代码2(SL经理)的问题 - 页 4

 
diostar:

我希望,这可能会提供一些帮助。

最初,我的符号是4位数,所有的跟踪止损,止损/限价单的修改,正如预期的那样。 然后我的经纪人决定采用小数点。我做了必要的修改,看到我的点数变成了-3.4,-4.5,0.1,4.6,7.3,等等,等等。 我想这是可以的,但实际上不是。假设我设定我的极限=7,然后说,新的tick 1,tick 2,tick 3依次发生。

1) 7.3>限价,然后订单被修改......经纪人填补了1个滑点......

2) 7.5>限价,然后订单被修改....,经纪人填补了0个滑点......

3) 7.1>限制,然后订单被修改...经纪人填补了2个滑点...

因此,总的来说,我的订单在所有3个点上被修改了3次。 意识到这一点后,我决定使用MathRound()将这些订单取整到最近的整数,因此1,2,3变成了

1) mathround(7.3) =7 >limit, NOT TRUE, not modified

2) mathround(7.5)=8 >limit, TRUE, 顺序被修改。

3) mathround(7.1)=7>limit,非真,未被修改。

事实上,我还在研究如何改进上述方法......到目前为止,它们还能正常工作,但我认为一定有比我更好的方法。


太棒了,Diostar,这对我来说是非常非常有用的信息,特别是我强调的那一点。

因此,如果我解决了我的问题,我所希望的最好的结果是。

每当我的条件在00、01、02等缺口得到满足时,我所希望的最好的结果是每一次的1、2、3(分别)的滚动。那么,在第03个缺口,它将修改我的订单02,01,00,然后是01,00,02,然后是00,02,01,直到所有的订单都被修改? 如果我把它们向前滚动,也是一样的,只是顺序不同等等。

我想如果发生这种情况,我可能会没事......但是我以后可能会发现和你一样,想把它拧紧,但我很乐意一次解决一座桥。谢谢你的先见之明!!

我还想试试那个论坛程序...

 
这个公式也很顺利,谢谢你对Diostar的支持,我追着自己的尾巴学了好久的代码,谢谢。
 

像往常一样,事后才想到不同的解决办法.....。

只是为了让我学习,下面的块状物是否可以作为我之前问题的替代解决方法?


//---------------------------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。 当时,我还没有足够的知识来想出这个主意。 即使是现在,我还在学习如何制作ARRAYS,所以我从几段代码中改编了它......

说实话,我不相信做一段代码有多难,它只是选择所有的订单,并一次性修改它们......如果数据流被发送到这里,每一次点击......

我很感谢你花时间来补充,我会给他们一个机会......嘿,还有Diostar,我相信我也注意到了你之前说的话,谢谢你的先见之明,我知道这不是我的代码....。 我确实看到了滚动的修改(* #orders I have going),而且我确实注意到了进入它的滑动......如果我解决了这个问题,我会向你报告,可能会以上述代码作为开始,再次感谢;)

 
Funky:


谢谢你在这方面的时间,Diostar。 当时,我还没有足够的知识来想出这个主意。 即使是现在,我还在学习如何制作ARRAYS,所以我从几段代码中改编了它......

说实话,我不相信做一段代码有多难,它只是选择所有的订单,并一次性修改它们......如果数据流被发送到这里,每一次点击......

我很感谢你花时间来补充,我会给他们一个机会......嘿,还有Diostar,我相信我也注意到了你之前说的话,谢谢你的先见之明,我知道这不是我的代码....。 我确实看到了滚动的修改(* #orders I have going),而且我确实注意到了进入它的滑移......如果我解决了这个问题,我会向你报告,可能会用上面的代码作为一个开始,再次感谢;)

欢迎你的到来。 滑点,就像点差一样,在任何修改价格、sl、tp的情况下,都是不报价的结果。但我总是在滑点为零的情况下进行订单结束(),仍然如此。有1,2个点可能是好的,但到目前为止,还不错。

原因: