//----信号线 和主线的交点 if (y < x && y1> x1) // Check up pass { f=1//标记向上 } //-------------------------------------------------------------------- if (y > x && y1< x1) //检查向下的通道 { f=2; //标记向下 } //---- 检查主线与20号线的向下交点 if (f==1 && x1<20)&& x1<20 && x>= 20) { if (Ticket > 0) // If there is an order, remove order OrderClose(Ticket,Lts,Bid,10); SL=Bid - StopLoss*Point; // Calculation of SL open TP=Bid + TakeProfit*Point; //计算TP开仓。 Alert("Attempting to open Buy. Waiting for reply..."); OrderSelect(Ticket, SELECT_BY_TICKET); if(OrderCloseTime()>0 ||! OrderSelect(Ticket, SELECT_BY_TICKET) {
if (Ticket > 0) // 它成功了 :) { Alert ("Opened Buy order " ,Ticket); return; f=0; // reset flag }
} //---- check crossing of main line from top to bottom of line 80 if (f=2 &&& x1>80 && x<= 80) { if (Ticket > 0) OrderClose(Ticket,Lts,Ask, 10); // 如果有订单,删除 SL=Ask + StopLoss*Point; // SL的计算方式 TP=Ask - TakeProfit*Point; //计算TP开仓。 Alert("Attempting to open Sell. Waiting for reply..."); OrderSelect(Ticket, SELECT_BY_TICKET); if(OrderCloseTime()>0 ||! OrderSelect(Ticket, SELECT_BY_TICKET) { Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,3,SL,TP);//Open Buy } if (Ticket > 0) // It worked :) { Alert ("Sell order opened " ,Ticket); return; f=0; // Zeroize flag }
谢谢你!!!。
这里是 起始链接--然后是其他的,IMHO。
请解释
分析部分使用了一个严格定义的时间框架。或时间框架
分析部分使用了一个严格定义的时间框架。或时间框架
能否请你放弃 "鱼 "的解析,如果你有任何意见,我将不胜感激。
好吧,我有一个想法,也许它有点好色...... 不,这只是不完全正确,看起来当检测到一个买入订单时,所有的挂单将被删除...所有的买单。 stsBUY应在开始前设置。我没有检查是否有错误。
我们将需要一个更正确的代码。没有错误
而且逻辑性很差。
能否请你放弃 "鱼 "的解析,如果你有任何意见,我将不胜感激。
你至少应该读一下课本,这样你就不用问 "二乘二 "是多少了。
你至少应该读一下课本,这样你就不用问 "2乘以2 "是多少了。
我不认为这是一个重要的观点,但如果我理解它,我就不会问,对吗?
即在算法中,在指标中的时间框架被指定的地方,我们明确地把它写出来。
对吗?
然后向我解释如下:....
专家顾问 - 随机指标的交叉,进入交易。
以下是该算法
int start()
{
RefreshRates(); // Refresh data
Symb=Symbol();
x1=x;
y1=y;
x=iStochastic( NULL,0,5,3,3,MODE_SMA,1,0,0); //0条上的随机主线值
y=iStochastic( NULL,0,5,3,3,MODE_SMA,1,1,0); //0条上的随机信号线值
Alert ("stochastic main",x);
Alert ("stochastic signal",y);
//----信号线 和主线的交点
if (y < x && y1> x1) // Check up pass
{
f=1//标记向上
}
//--------------------------------------------------------------------
if (y > x && y1< x1) //检查向下的通道
{
f=2; //标记向下
}
//---- 检查主线与20号线的向下交点
if (f==1 && x1<20)&& x1<20 && x>= 20)
{ if (Ticket > 0) // If there is an order, remove order
OrderClose(Ticket,Lts,Bid,10);
SL=Bid - StopLoss*Point; // Calculation of SL open
TP=Bid + TakeProfit*Point; //计算TP开仓。
Alert("Attempting to open Buy. Waiting for reply...");
OrderSelect(Ticket, SELECT_BY_TICKET);
if(OrderCloseTime()>0 ||! OrderSelect(Ticket, SELECT_BY_TICKET)
{
Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,3,SL,TP);//打开买入
}
if (Ticket > 0) // 它成功了 :)
{
Alert ("Opened Buy order " ,Ticket);
return;
f=0; // reset flag
}
}
//---- check crossing of main line from top to bottom of line 80
if (f=2 &&& x1>80 && x<= 80)
{ if (Ticket > 0)
OrderClose(Ticket,Lts,Ask, 10); // 如果有订单,删除
SL=Ask + StopLoss*Point; // SL的计算方式
TP=Ask - TakeProfit*Point; //计算TP开仓。
Alert("Attempting to open Sell. Waiting for reply...");
OrderSelect(Ticket, SELECT_BY_TICKET);
if(OrderCloseTime()>0 ||! OrderSelect(Ticket, SELECT_BY_TICKET)
{
Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,3,SL,TP);//Open Buy
}
if (Ticket > 0) // It worked :)
{
Alert ("Sell order opened " ,Ticket);
return;
f=0; // Zeroize flag
}
}
return(0); }
如果我们运行,专家顾问将在半小时内打开和关闭订单,即在9.04打开,在9.05关闭,在9.06再次打开,在9.07关闭,等等,方向相同。
为什么会发生这种情况?
注意到。
如果有两个BUYLIMIT和BUYSTOP订单,我需要在BUYLIMIT触发时删除BUYSTOP,反之亦然。你能告诉我这个条件是如何实现的吗?
实际上,这个逻辑应该是这样的。
1.如果有两个挂单 而没有头寸,那么就在变量中记住这些挂单的ticks。
2.如果有一个挂起的SellStop,而没有挂起的BuyStop,如果有一个Buy头寸,将最后打开的Buy头寸的票据与记住的BuyStop票据进行比较。
如果它们相等,这意味着ByStop被转换为市场买入 --> 如果有一个待定的SellStop -- 删除它。
如果有一个悬而未决的BuyStop,没有悬而未决的SellStop,如果有一个Sell头寸,将最后打开的Sell头寸的票据与记住的SellStop票据进行比较。
。
如果它们相等,那么SellStop被转换为市场卖出 --> 如果有一个待定的BuyStop -- 删除它。
大约是这样...这只是一个粗略的逻辑。它需要功能。