微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当前虚拟追踪止损代码的解决方案/建议

如何解决当前虚拟追踪止损代码的解决方案/建议

想知道是否有人可以找出以下虚拟追踪止损的解决方案。提醒一下,我对编码也很陌生!

这里的想法是,当交易开始时,Ask 和 Bid 用于标记 OrderOpenTime 之后的最高价 (TicketHighLow[i][3]) 和最低价 (TicketHighLow[i][2])。一旦达到 TrailingStartGap,并且价格回撤到 TrailingStop,订单就会关闭

要求虚拟跟踪止损应该能够根据 OrderTicket 跟踪每个同时打开的多个订单,而且还可以根据 OrderMagicNumber 进行过滤。

以下代码的问题在于,当打开多个订单时,我标记票证和调整数组大小的方式(我相信)会导致 OrderTicket 与数组中的 HighestHigh 和 LowestLow 不匹配。换句话说;

TicketHighLow[i][1],TicketHighLow[i][2],TicketHighLow[i][3]

变得像

TicketHighLow[h][1],TicketHighLow[i][3]

结果是交易立即开仓和平仓。

关于如何解决这个问题的任何想法将不胜感激!

double TicketHighLow[90][4]; // declare a two dimensional global array


int init()
{
    for(int i=ArrayRange(TicketHighLow,0)-1; i >= 0; --i){ TicketHighLow[i][2]=1000; TicketHighLow[i][3]=0; } // initialize array by stamping a high value for LowestLow and low value for HighestHigh

}

// Expert start
int start()
{ 
    OnEveryTick();
    return (0);
}

void OnEveryTick()
{
    VirtualTrailingStop();    
}
        

void VirtualTrailingStop()
{
        
        int orderstotal = OrdersTotal();
        int orders = 0;
        int ordticket[90][2];
        for (int i = 0; i < orderstotal; i++)
        {
            if (!OrderSelect(i,SELECT_BY_POS,MODE_TradES)) continue;
            if (OrderSymbol() != Symbol() || OrderMagicNumber() != 1) // OrderMagicNumber filter
            {
                continue;
            }
            ordticket[orders][0] = OrderOpenTime();
            ordticket[orders][1] = OrderTicket();
            TicketHighLow[orders][0] = OrderOpenTime(); 
            TicketHighLow[orders][1] = OrderTicket(); // I think this is where the problem lays!!!
            
            
            orders++;
        }
        if (orders > 1)
        {
            ArrayResize(ordticket,orders);
            ArraySort(ordticket);
            ArrayResize(TicketHighLow,orders);
            ArraySort(TicketHighLow);
        }
        
        for (i = 0; i < orders; i++)
        {
            if (OrderSelect(ordticket[i][1],SELECT_BY_TICKET) == true)
            {
                if (OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
                {
                    
                    if (TicketHighLow[i][1] == OrderTicket())
                    
                    {
                        
                        if (Ask > TicketHighLow[i][3])
                        {
                            TicketHighLow[i][3] = Ask; // stamping new HighestHigh
                        }
                        
                        if (Bid < TicketHighLow[i][2])
                        {
                            TicketHighLow[i][2] = Bid; // stamping new LowestLow
                        }
                        
                        
                        if ((OrderType() == OP_BUY && TicketHighLow[i][3] - OrderOpenPrice() > TrailingStartGaP*PipValue*Point) ||
                        (OrderType() == OP_SELL && OrderOpenPrice() - TicketHighLow[i][2] > TrailingStartGaP*PipValue*Point)) // TrailingStartGap reached
                        
                        {
                            
                            if ((OrderType() == OP_BUY && TicketHighLow[i][3] - Ask > TrailingStoP*PipValue*Point) ||
                            (OrderType() == OP_SELL && Bid - TicketHighLow[i][2] > TrailingStoP*PipValue*Point)) // Stop loss reached
                            {
                                bool ret = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),4,Blue);
                                
                                if (ret == true)
                                {
                                    int error = GetLastError();
                                    if (ret == false && error > 0)
                                    Print("OrderClose() error - ",ErrorDescription(error));
                                }
                            }
                        }
                    }
                }
                
                
                
            }
        }
        

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。