问吧! - 页 31

 
if (FirstRun==1) {

FirstRun=0;

prevtime=Time[0];

}

if ((prevtime == Time[0]) && (CurTime()-prevtime)>MaxTradeTime) {

NewBar=0;

}

else {

prevtime

我找到了! 我们将在未来这样做--在我们缺乏理解的领域,我们在别人的帮助下学习,他们比我们有更多的知识和智慧!非常感谢您

戴夫 <<<
 

for (int cnt1=OrdersTotal()-1;cnt1>=0;cnt1--)

OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);

if (OrderType()>=OP_SELL && OrderSymbol()==Symbol() && (OrderMagicNumber () == MagicNumber || MagicNumber==0))

{

if(OrderOpenPrice()-Ask>=TrailingStop*Point)

{

if(OrderStopLoss()>Ask+Point*15||OrderStopLoss()==0)

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(15 *Point),Bid-(20*Point),Cyan); //Modify stop loss and take profit

}

return(0);

}

if (OrderType()>=OP_BUY && OrderSymbol()==Symbol() && (OrderMagicNumber () == MagicNumber || MagicNumber==0))

{

if(Bid-OrderOpenPrice()>=TrailingStop*Point)

{

if(OrderStopLoss()<Bid-Point*15 ||OrderStopLoss()==0)

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-(15*Point),Ask+(20*Point),Cyan); //Modify stop loss and take profit

}

return(0);

}

return(0);

}

}

现在有了正确的格式,你们中的一位非常慷慨的编码员能否帮助我解决上面这个SL和TP问题。回到我最初的请求。我的睡眠程序在不同的时间停用了EA。在睡眠模式之前,EA创建了开放的交易,止损为40-50点,止盈为 100。就在EA进入睡眠状态之前,我希望每笔开放交易的止损变为15点,止盈变为25点。止损不是跟踪止损,而是低于(买入)或高于(卖出)其当前交易价格的硬性止损(同样,止盈也是如此)。请把你的专业知识借给我,让我的日子好过点!!

 

对于尾随止损,使用以下函数。我认为它的写法很容易被理解。有时,编程专家写的代码,可能在几分之一秒的时间内是有效的,但却使阅读和调试成为一件非常困难的工作。

void TrailingAlls(int start,int stop)

{

int profit;

double stoptrade;

double stopcal;

if(stop==0)

return;

int trade;

for(trade=OrdersTotal()-1;trade>=0;trade--)

{

if(!OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))

continue;

if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)

continue;

if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)

{

if(OrderType()==OP_BUY)

{

profit=NormalizeDouble((Bid-OrderOpenPrice())/Point,0);

if(profit<start)

continue;

stoptrade=OrderStopLoss();

stopcal=Bid-(stop*Point);

if(stoptrade==0||(stoptrade!=0&&stopcal>stoptrade))

OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,OrderTakeProfit(),0,Blue);

}//Long

if(OrderType()==OP_SELL)

{

profit=NormalizeDouble((OrderOpenPrice()-Ask)/Point,0);

if(profit<start)

continue;

stoptrade=OrderStopLoss();

stopcal=Ask+(stop*Point);

if(stoptrade==0||(stoptrade!=0&&stopcal<stoptrade))

OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,OrderTakeProfit(),0,Red);

}//Shrt

}

}//for

}

在你的启动中使用以下方式调用它。

TrailingAlls(TrailStartPips,TrailStopPips)。

 

马吉,在我的代码中(这是错的)。 我不想要跟踪止损。 我只是想修改未平仓的票据,使每笔未平仓的买入和卖出都有一个15点的硬性止损,以及从当前货币价格 起25点的硬性获利。

我需要它搜索到与货币符号有关的开仓,然后修改每笔开仓交易的止损和止盈。 这就是我所需要的。

昨天晚上,我们进入了一个切入点,涉及到了追踪止损--我和Phoenix之间的误解。

请帮助我完成这个并不难的功能--对你来说是这样的!

戴夫<<<
 

戴夫。

我想在我给你的程序中已经有了做这种改变的成分。

否则,你必须把你的代码贴出来或发邮件给我,我可以看看我能做什么。有时候,阅读别人的代码是非常困难的,所以这可能是一个耗时的任务。在这种情况下,我将举起我的双手。

祝你好运。

 

第309号帖子是我目前的代码,在PHP中。

只需要将公开交易改为硬止损15,硬获利 25。对于像你这样的专家来说,修改这个编码应该不会太多。

戴夫<<
 

戴夫。

就像我说的,做这些编辑是非常耗时的。我在午餐时间玩了一下,这里是一个尝试。如果它不工作,你就得靠自己了。它没有经过测试,所以...

在你的主程序中,在你指示程序睡觉之前调用这个。

祝你好运。

void ChangeStop(int takeprofit,int stop)

{

double profit;

double stopcal;

if(stop==0)

return;

int trade;

for(trade=OrdersTotal()-1;trade>=0;trade--)

{

if(!OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))

continue;

if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)

continue;

if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)

{

if(OrderType()==OP_BUY)

{

profit=Ask+(takeprofit*point);

stopcal=Bid-(stop*Point);

OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,profit,0,Blue);

}//Long

if(OrderType()==OP_SELL)

{

profit=Bid-(takeprofit*point);

stopcal=Ask+(stop*Point);

OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,profit,0,Red);

}//Shrt

}

}//for

}

 

这里面的修改发生在哪里呢? 原来的止损是40,止盈是100。 作为睡眠模式的一部分,任何现有的未平仓订单 的止损将改为15,任何现有的未平仓订单 的止盈将改为25。

未结订单票: 在睡眠模式之前。

睡眠模式前 止损-40 睡眠模式前 获利-100 睡眠模式后 止损修改-15 睡眠模式后 获利修改-25

我不是在初始化订单设置,我是在修改已经下达且仍然有效的现有订单。

谢谢你的帮助! 为什么这么简单的事情看起来这么难?

戴夫<<
 

戴夫。

这并不难。你必须多研究一下MQ。看看我提供的代码。参数、止损和止盈应该是你想使用的数字。

这一切都在那里,你将不得不想出如何使用它。

 

我扔下了毛巾。 我得到了错误。 我将使用菲尼克斯提供的东西,因为它在我能接受的范围内起作用。如果这种语言在美国有一所学校可以学习,那肯定会使我的生活更轻松。 不幸的是,现在还没有。

谢谢你的意见,Maji和Phoenix!

戴夫<<<