extern int TP = 100; extern int SL = 100; extern int Trailing = 15;
int init() {return(0);} int deinit() {return(0);}
int start() { //========= Расчёт уровня безубытка ====== int i; double lotsBUY=0; double lotsSEL=0; double sumBUY=0; double sumSEL=0;
for (i=0; i<OrdersTotal(); i++) { if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; if (OrderSymbol()!=Symbol()) continue; if (OrderType()==OP_BUY) { lotsBUY=lotsBUY+OrderLots(); sumBUY=sumBUY+OrderLots()*OrderOpenPrice(); }
if (OrderType()==OP_SELL) { lotsSEL=lotsSEL-OrderLots(); sumSEL=sumSEL-OrderLots()*OrderOpenPrice(); } } double priceBUY=0; if (lotsBUY!=0) priceBUY=sumBUY/lotsBUY; double priceSEL=0; if (lotsSEL!=0) priceSEL=sumSEL/lotsSEL;
好心人,帮帮忙,我不能理解,追踪止损没有像它应该的那样工作,如果交易是在卖出上打开的,交易工作正常,但如果你打开买入,那么由于某种原因立即修改了止损。我不能理解的错误在哪里....这里是代码。
外部int TP = 50;
外部int SL = 50;
外来的int Trailing = 15;
int init()
{return(0);}
int deinit()
{return(0);}
int start()
{
//========= 计算盈亏平衡水平 ======
int i;
double lotsBUY=0。
double lotsSEL=0。
double sumBUY=0。
double sumSEL=0。
for (i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 继续。
如果(OrderSymbol()!=Symbol())继续。
如果(OrderType()==OP_BUY)
{
lotsBUY=lotsBUY+OrderLots()。
sumBUY=sumBUY+OrderLots()*OrderOpenPrice()。
}
如果(OrderType()==OP_SELL)
{
lotsSEL=slotsSEL-OrderLots()。
sumSEL=sumSEL-OrderLots()*OrderOpenPrice()。
}
}
double priceBUY=0。
如果(lotsBUY!=0) priceBUY=sumBUY/lotsBUY;
double priceSEL=0。
如果(lotSEL!=0) priceSEL=sumSEL/lotsSEL。
//======== 打开位置 =====
double MA=iMA(NULL,0,14,0,MODE_SMMA,PRICE_CLOSE,0)。
如果(OrdersTotal() < 1 && Bid>MA)
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Ask-SL*Point,Ask+TP*Point,0,0,0,Green)。
如果(OrdersTotal() < 1 && Ask<MA)
OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid+SL*Point,Bid-TP*Point,0,0,0,Red) 。
//======= 追踪止损 =======
for(i = 0; i <= OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES)。
如果(OrderType()==OP_SELL && Trailing!=0)
{
如果(priceSEL-Ask>=Trailing*Point && OrderStopLoss()>(Ask+Trailing*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Trailing*Point,OrderTakeProfit(),0,CLR_NONE) 。
}
}
如果(OrderType()==OP_BUY && Trailing!=0)
{
如果(Bid-priceBUY>=Trailing*Point &&(Bid-Point*Trailing)>OrderStopLoss())
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*Trailing,OrderTakeProfit(),0,CLR_NONE)
}
}
}
return(0);
}
有一个时刻,如果我在TrailingStop块中把priceBUY改成OrderOpenPrice(),它就会起作用,但我需要从盈亏平衡水平开始追踪,而不是从开盘价.....。在卖出时有效,但在买入时由于某种原因不能....。我不明白错误在哪里.....SOS!!!!!!!!
这不是一个错误--它是一个信息,表明已经达到了最低余额--即账户被耗尽--运行被终止,用另一组输入参数开始一个新的运行--见优化测试器选项卡中的复选框和设置限制值。
下午好!!!。我的EA在这个地方收回了订单。
我的EA以前似乎一直做得很好,至少在我有2-5个订单之前。 但现在我想有多少订单就有多少订单--每边20个,50个。简而言之,它不清洁。好吧,有两三次或四次是这样的,然后突然就没有了!
我想知道它在测试器中的表现如何--一般来说,它删除了接近价格的几个订单,但不是全部!我想知道它是如何做到的。我们可以设想、发明、幻想什么样的偏差,它一定会关闭?
真的,以前很好。它曾经关闭,不是吗? 它还需要什么??????
好心人,帮帮忙,我不能理解,追踪止损没有像它应该的那样工作,如果交易是在卖出上打开的,交易工作正常,但如果你打开买入,那么由于某种原因立即修改了止损。我无法理解的错误在哪里....这里是代码。
extern int TP = 100;
extern int SL = 100;
extern int Trailing = 15;
int init()
{return(0);}
int deinit()
{return(0);}
int start()
{
//========= Расчёт уровня безубытка ======
int i;
double lotsBUY=0;
double lotsSEL=0;
double sumBUY=0;
double sumSEL=0;
for (i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()==OP_BUY)
{
lotsBUY=lotsBUY+OrderLots();
sumBUY=sumBUY+OrderLots()*OrderOpenPrice();
}
if (OrderType()==OP_SELL)
{
lotsSEL=lotsSEL-OrderLots();
sumSEL=sumSEL-OrderLots()*OrderOpenPrice();
}
}
double priceBUY=0;
if (lotsBUY!=0) priceBUY=sumBUY/lotsBUY;
double priceSEL=0;
if (lotsSEL!=0) priceSEL=sumSEL/lotsSEL;
//======== Открытие позиции =====
double MA=iMA(NULL,0,14,0,MODE_SMMA,PRICE_CLOSE,0);
if (OrdersTotal() < 1 && Bid>MA)
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Ask-SL*Point,Ask+TP*Point,0,0,0,Green);
if (OrdersTotal() < 1 && Ask<MA)
OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid+SL*Point,Bid-TP*Point,0,0,0,Red);
//======= Trailing Stop =======
for(i = 0; i <= OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderType()==OP_SELL && Trailing!=0)
{
if(priceSEL-Ask>=Trailing*Point && OrderStopLoss()>(Ask+Trailing*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Trailing*Point,OrderTakeProfit(),0,CLR_NONE);
}
}
if (OrderType()==OP_BUY && Trailing!=0)
{
if(Bid-priceBUY>=Trailing*Point && (Bid-Point*Trailing)>OrderStopLoss())
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*Trailing,OrderTakeProfit(),0,CLR_NONE);
}
}
}
return(0);
}
好心人,帮帮忙,我不能理解,追踪止损没有像它应该的那样工作,如果交易是在卖出上打开的,交易工作正常,但如果你打开买入,那么由于某种原因立即修改了止损。我不能理解的错误在哪里....这里是代码。
有一段时间,如果我在追踪止损区块中把priceBUY改为OrderOpenPrice(),一切都能正常工作,但是我需要从收支平衡水平开始追踪止损,而不是从开盘价.....。在卖出时有效,但在买入时由于某种原因不能....。我不明白错误在哪里.....SOS!!!!!!!!
下午好!!!。我的EA在这个地方收回了订单。
我的EA以前似乎一直做得很好,至少在我有2-5个订单之前。 现在我有了一个新的变体,我想有多少订单就有多少订单--每边20个,50个。简而言之,它不清洁。好吧,有两三次或四次是这样的,然后突然就没有了!
我想知道它在测试器中的表现如何--它删除了几个接近价格的订单,但不是所有的订单!我们可以发明什么样的偏差,花样百出,以便我们能够不失时机地关闭它们?
真的,以前一切都很好吗?它曾经关闭,不是吗? 他还需要什么??????
呃,好吧,那是不可能的。
当订单没有关闭时,它的OrderClosePrice等于0,在这个地方,你必须用你关闭订单的真实价格来代替,即如果是卖出订单,是Ask,如果是Bid,是Buy。
好吧,它并不像那样工作。
在订单关闭之前,它的OrderClosePrice等于0,在这个地方,你必须填写你关闭订单的真实价格,即卖出订单的Ask和买入订单的Bid。
不,没有关闭的订单的OrderClosePrice()不等于零 - 检查。OrderCloseTime()- 是的