[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 341

 
亲爱的新手们!这里讨论的一些问题非常具体,确实值得提示和帮助。但有些,嗯,坦率地说,产生于这样一个事实,即开始编程的一些EXPERT作家甚至没有阅读MCL的教科书。提示:下载该教程(5mb)并阅读它,你将不必等待论坛的答案--它将在你的头脑中出现。
 
costy_ >> :

保存的指示参数在模板初始化过程中被 "输入 "到指标中一次,然后 "它们变得完全独立"/。

所有改变的指标参数都保存在模板中,如果你已经改变了指标参数,请重新保存模板。


>> 谢谢你!

 

mazepa 08.12.2009 17:42

回答:关于CODE!

如果我理解的算法,那么在设定的时间,我们打开买入(卖出),如果价格已经超过另一个方向>10点,那么我们关闭订单并站在相反的方向上。

为了关闭,我正在使用我自己的通用功能。

//
void _CloseAllOrder()
{
for(int i=0; i<OrdersTotal(); i++) //交叉所有货币的所有订单
{
if (OrderSelect(i,SELECT_BY_POS)==true) //如果订单被成功选中
{
if (OrderSymbol() !=Symbol()) continue; //如果订单是 错误的货币,继续搜索
{
switch(OrderType()) //在需要的订单中,确定类型(Bue_Sell)并关闭它
{
case 0:OrderClose(OrderTicket(),OrderLots(),Bid,2);break;
case 1:OrderClose(OrderTicket(),OrderLots(),Ask,2);break;
}
}
}
}
return;
}
所以现在在反方向开盘前你只要写_CloseAllOrder()

 


朋友们,我只是在学习。请不要看程序的内容,只要帮我找到程序中的一个错误。

int start()
{
switch(CurrentState)
{
case STATE_SHORT:
MyOrderTicket =OrderSend(Symbol(), OP_SELL, Lots, Bid, 1, 0, 0,NULL, 1, 0, Red);
OrderSelect(MyOrderTicket,SELECT_BY_TICKET);
if (OrderModify(OrderTicket(), OrderOpenPrice(), Bid+90*Point, Bid-Profit1*Point, 0, Green) ==true)
{CurrentState=STATE_1;
break;
}
case STATE_1:
OrderSelect(MyOrderTicket,SELECT_BY_TICKET);
if(Ask <= OrderTakeProfit() )

{CurrentState=STATE_SHORT;
break;
}
if(Bid >= (OrderOpenPrice()+Profit1*Point)
{CurrentState=STATE_SHORT;
break;
}
//----
return(0);
}


错误情况如下。\end_of_program' - 不平衡的左括号。错误在哪里?









 
Klinskih >> :

朋友们,我只是在学习。请不要看程序的内容,只要帮我找到程序中的一个错误。

明白了。

                    if(Bid >= (OrderOpenPrice()+ Profit1*Point)

需要。

                    if(Bid >= OrderOpenPrice()+ Profit1*Point)



 

如何声明一个一维数组而不对每个存储单元应用写操作(是否可能)?

  ии[1]=ExtMapBuffer1[0]; ии[2]=ExtMapBuffer2[0];  ии[3]=ExtMapBuffer3[0]; 

而是由一个一维的序列

  ии[3]={ExtMapBuffer1[0],ExtMapBuffer2[0],ExtMapBuffer3[0]} 

还是一维序列只适用于数字和逻辑常数!!?

 
TheXpert >> :

明白了。

>> 我们必须这样做。



谢谢你,朋友!

 
future >> :

还有一个问题。如果(OrdersTotal()==0)这个...如果未结订单的数量等于零...那么,如果当日开仓的订单数量等于零,会是怎样的情况?

不是有类似OrdersDayTotal的东西吗?

没有,但我们总是可以写出我们自己的函数)

int OrdersDayTotal(string Symb)
 {
int cnt,
OrdersDayTotal=0,
Time0=iTime(NULL,PERIOD_D1,0);

for( cnt=0; cnt<OrdersTotal(); cnt++)
   {
   OrderSelect( cnt, SELECT_BY_POS, MODE_TRADES);
   if(OrderSymbol()== Symb && OrderType()<2)
      {
      if(OrderOpenTime()> Time0) OrdersDayTotal++;
      }
   }
for( cnt=0; cnt<OrdersHistoryTotal(); cnt++)
   {
   OrderSelect( cnt, SELECT_BY_POS, MODE_HISTORY);
   if(OrderSymbol()== Symb && OrderType()<2)
      {
      if(OrderOpenTime()> Time0) OrdersDayTotal++;
      }
   }
return( OrdersDayTotal);
 }

计算今天对某一符号所开的买入和卖出订单。没有悬而未决的订单。

如果(OrdersDayTotal(Symbol())==0) {...}。

类似这样的情况)

 
Stepan241 >> :

mazepa 08.12.2009 17:42

答案:在COD上!

如果我理解的算法,我们在设定的时间打开买入(卖出),如果价格在另一个方向通过>10个点,我们就关闭订单并转移到另一边。

我使用我自己的通用函数来关闭它。

//关闭窗口中所有市场订单的功能--------------------------------------------------------------------------------------------------
空白 _CloseAllOrder()
{
for(int i=0; i<OrdersTotal(); i++) //剔除所有货币的所有订单
{
如果(OrderSelect(i,SELECT_BY_POS)==true) //如果订单被成功选中。
{
如果(OrderSymbol()!=Symbol())继续; //如果订单使用的是错误的货币,继续搜索
{
switch(OrderType()) //当所需的订单被提交时,定义其类型(Bue_Sell)并关闭它
{
case 0:OrderClose(OrderTicket(),OrderLots(),Bid,2);break;
case 1:OrderClose(OrderTicket(),OrderLots(),Ask,2);break;
}
}
}
}
返回。
}
所以现在你只需在反方向打开之前写_CloseAllOrder()


这个功能是个炸弹,我花了几页时间。 非常感谢你。
 
Stepan241 >> :

mazepa 08.12.2009 17:42

答案:在COD上!

如果我理解的算法,我们在设定的时间打开买入(卖出),如果价格向另一个方向移动了>10点,我们就关闭订单并向相反方向移动。

我使用我自己的通用函数来关闭它。

//关闭窗口中所有市场订单的功能--------------------------------------------------------------------------------------------------
空白 _CloseAllOrder()
{
for(int i=0; i<OrdersTotal(); i++) //剔除所有货币的所有订单
{
如果(OrderSelect(i,SELECT_BY_POS)==true) //如果订单被成功选中。
{
如果(OrderSymbol()!=Symbol())继续; //如果订单使用的是错误的货币,继续搜索
{
switch(OrderType()) //当所需的订单被提交时,定义其类型(Bue_Sell)并关闭它
{
case 0:OrderClose(OrderTicket(),OrderLots(),Bid,2);break;
case 1:OrderClose(OrderTicket(),OrderLots(),Ask,2);break;
}
}
}
}
返回。
}
所以现在你只需在反方向打开之前写_CloseAllOrder()


这个功能是个炸弹,我花了几页时间。 非常感谢你。
原因: