[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 636

 

好心人,帮帮忙,我不能理解,追踪止损没有像它应该的那样工作,如果交易是在卖出上打开的,交易工作正常,但如果你打开买入,那么由于某种原因立即修改了止损。我不能理解的错误在哪里....这里是代码。

外部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!!!!!!!!

 
Roman.:


这不是一个错误--它是一个信息,表明已经达到了最低余额--即账户被耗尽--运行被终止,用另一组输入参数开始一个新的运行--见优化测试器选项卡中的复选框和设置限制值。

谢谢你!
 

下午好!!!。我的EA在这个地方收回了订单。

 if(Summaprofita()>=Profit_v_balans )
        {
         for(int i=OrdersTotal()-1;i>=0;i--)
           {
              bool error=true;
            OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
            
            if( magic==OrderMagicNumber( ) && OrderSymbol()==Symbol())
              {
              
                 OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE); error=false;
                           Sleep(1000);
             OrderDelete(OrderTicket());error=false;
         } } }
        

我的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!!!!!!!!
 
MIR-ASOV:

好心人,帮帮忙,我不能理解,追踪止损没有像它应该的那样工作,如果交易是在卖出上打开的,交易工作正常,但如果你打开买入,那么由于某种原因立即修改了止损。我不能理解的错误在哪里....这里是代码。

有一段时间,如果我在追踪止损区块中把priceBUY改为OrderOpenPrice(),一切都能正常工作,但是我需要从收支平衡水平开始追踪止损,而不是从开盘价.....。在卖出时有效,但在买入时由于某种原因不能....。我不明白错误在哪里.....SOS!!!!!!!!

尝试用Print() 输出修改前的priceBUY值,看看是否符合预期...
 
尝试用Print()输出修改前的priceBUY值,看看是否符合预期...是
的,我检查过了,它是完全对应的,而且完全......。本质上,BUY的盈亏平衡水平等于订单的开盘价,但由于某些原因,它不工作,我把OrderOpenPrice()一切工作,我把priceBUY,没有......。
 
最有可能的是,在开盘时你的priceBUY 变量为零,所以Bid-priceBUY(0)==Bid,因此
 
Dimka-novitsek:

下午好!!!。我的EA在这个地方收回了订单。

我的EA以前似乎一直做得很好,至少在我有2-5个订单之前。 现在我有了一个新的变体,我想有多少订单就有多少订单--每边20个,50个。简而言之,它不清洁。好吧,有两三次或四次是这样的,然后突然就没有了!

我想知道它在测试器中的表现如何--它删除了几个接近价格的订单,但不是所有的订单!我们可以发明什么样的偏差,花样百出,以便我们能够不失时机地关闭它们?

真的,以前一切都很好吗?它曾经关闭,不是吗? 他还需要什么??????

呃,好吧,那是不可能的。

  OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE);

当订单没有关闭时,它的OrderClosePrice等于0,在这个地方,你必须用你关闭订单的真实价格来代替,即如果是卖出订单,是Ask,如果是Bid,是Buy。

 
alsu:

好吧,它并不像那样工作。

在订单关闭之前,它的OrderClosePrice等于0,在这个地方,你必须填写你关闭订单的真实价格,即卖出订单的Ask和买入订单的Bid。


不,没有关闭的订单的OrderClosePrice()不等于零 - 检查。OrderCloseTime()- 是的
 
谢谢你!!!。我给它一个机会,我知道了。