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

 
每次买入的订单是否不超过一个?
 
dkfl.zrjdktdbx:
谢谢你!!!。

这里是 起始链接--然后是其他的,IMHO。
 
Ivn:

请解释

分析部分使用了一个严格定义的时间框架。或时间框架
 
好吧,我有一个想法,也许它有点好色......
 int BUY;
 for( i=OrdersTotal();i>0;i--){OrderSelect(i-1,SELECT_BY_POS );if(OrderSymbol()==Symbol()&&OrderMagicNumber( )==????){
if(OrderType( )==OP_BUY){BUY++;}}} 
   if ( BUY> stsBUY) {//Alert ("NashlY BUY " );
   for ( i=OrdersTotal();i>0;i--){ OrderSelect(i-1,SELECT_BY_POS );
if( OrderMagicNumber( )==???? &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_BUYSTOP) {    
 OrderDelete(OrderTicket( ) ); 
  stsBUY=BUY;  Alert ("OrderDelete-OP_BUYSTOP",  GetLastError( ) );      }

if( OrderMagicNumber( )==???? &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_BUYLIMIT) {    
 OrderDelete(OrderTicket( ) ); 
  stsBUY=BUY;  Alert ("OrderDelete-OP_BUYSTOP",  GetLastError( ) );      }


}}
不,这只是不完全正确,看起来当检测到一个买入订单时,所有的挂单将被删除...所有的买单。 stsBUY应在开始前设置。我没有检查是否有错误。
 
Vinin:

分析部分使用了一个严格定义的时间框架。或时间框架

能否请你放弃 "鱼 "的解析,如果你有任何意见,我将不胜感激。
 
dkfl.zrjdktdbx:
好吧,我有一个想法,也许它有点好色...... 不,这只是不完全正确,看起来当检测到一个买入订单时,所有的挂单将被删除...所有的买单。 stsBUY应在开始前设置。我没有检查是否有错误。


我们将需要一个更正确的代码。没有错误

而且逻辑性很差。

 
Ivn:

能否请你放弃 "鱼 "的解析,如果你有任何意见,我将不胜感激。

你至少应该读一下课本,这样你就不用问 "二乘二 "是多少了。

 
FelixFX:

你至少应该读一下课本,这样你就不用问 "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关闭,等等,方向相同。

为什么会发生这种情况?

注意到。

 
sss2019:
如果有两个BUYLIMIT和BUYSTOP订单,我需要在BUYLIMIT触发时删除BUYSTOP,反之亦然。你能告诉我这个条件是如何实现的吗?

实际上,这个逻辑应该是这样的。

1.如果有两个挂单 而没有头寸,那么就在变量中记住这些挂单的ticks。

2.如果有一个挂起的SellStop,而没有挂起的BuyStop,如果有一个Buy头寸,将最后打开的Buy头寸的票据与记住的BuyStop票据进行比较。

如果它们相等,这意味着ByStop被转换为市场买入 --> 如果有一个待定的SellStop -- 删除它。

如果有一个悬而未决的BuyStop,没有悬而未决的SellStop,如果有一个Sell头寸,将最后打开的Sell头寸的票据与记住的SellStop票据进行比较。

如果它们相等,那么SellStop被转换为市场卖出 --> 如果有一个待定的BuyStop -- 删除它。

大约是这样...这只是一个粗略的逻辑。它需要功能。

 
好吧,我很抱歉,这只是一个快速... 事实上,是的,我的错,这是个错误的方向。我应该,我应该翻阅历史,找到最后的订单和... и... 不,我真的不知道...