[存档!]任何菜鸟问题,为了不给论坛添乱。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 2. - 页 404

 
Dimka-novitsek:
我无法组织一个循环,X和Y总是等于0。

首先,清除你头脑中的垃圾。

让你的代码 漂亮而有条理。

也不要贪图评论。

 

是的,当然了。

我首先选择具有所需魔数和该货币对的订单。如果( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()){

然后循环for( i=OrdersTotal();i==0;i--),其中我像这样选择订单 OrderSelect(i,SELECT_BY_POS ); 然后计算有多少订单作为OP_SELLSTOP。

如果没有订单,那么我们就开一个不存在的订单类型的订单。上层循环中的X变量和下层循环中的Y变量被用来计算必要类型的订单。两个循环的结构和目的都是一样的。

我已经写了解释,但在这里,爸爸来了,打电话,带来了牛奶、茶和哈尔瓦,我没有发送消息,我去撒尿,我的父亲擦掉了未发送的消息,说,但什么,你可以在另一个搜索引擎窗口写?我想知道荨麻糊是什么。 我有点吓坏了,几乎没有解释就发了过去。

那么,X和Y总是0。for循环一定没有工作。简而言之,我不明白什么地方可能不工作,因为这一点,订单在每个tick 上打开2。


 
Dimka-novitsek:

是的,当然了。

我首先选择具有所需魔数和该货币对的订单。如果( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()){

然后循环for( i=OrdersTotal();i==0;i--),其中我像这样选择订单 OrderSelect(i,SELECT_BY_POS ); 然后计算有多少订单作为OP_SELLSTOP。

如果没有订单,那么我们就开一个不存在的订单类型的订单。上层循环中的X变量和下层循环中的Y变量被用来计算必要类型的订单。两个循环的结构和目的都是一样的。

我已经写了解释,但在这里,爸爸来了,打电话,带来了牛奶、茶和哈尔瓦,我没有发送消息,我去撒尿,我的父亲擦掉了未发送的消息,说,但什么,你可以在另一个搜索引擎窗口写?我想知道荨麻糊是什么。 我有点吓坏了,几乎没有解释就发了过去。

那么,X和Y总是0。for循环一定没有工作。简而言之,我完全不明白是什么原因造成的,它导致订单在每个tick上打开2个。


这是完全正确的,for 循环没有做你需要的事情。

你有以下情况:for( i=OrdersTotal();i==0;i--)

1) 如果有0个订单,循环将被执行1次。在这种情况下,它将选择未知数并对其进行未知数的处理=)

2) 如果有超过0个订单,循环将根本不启动,因为条件 "i==0 "不符合。

 
谢谢你!!!。我一会儿再重读一下这个参考资料!
 
是的!谢谢你!!!。
 
Ds你知道的,我不能把它弄好,所有的东西都是一样的。
//+------------------------------------------------------------------+
//|                                                    для лавин.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
extern double stoploss=0; extern double takeprofit=20;extern int otstup=20; extern datetime expiration=0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
 int tiket,tikett;double volume=0.1;int i=0,R1=0,R2=0,A=1 ;double price=PRICE_OPEN;
   //  R1=((PRICE_OPEN- stoploss*Point)*stoploss)/stoploss;R2=((PRICE_OPEN+ stoploss*Point)*stoploss)/stoploss;
     
     
int start()
  {       int X,Y; double price=(Ask+Bid)/2;            
//----
       Alert ("OrdersTotal()",OrdersTotal());

if(OrderSymbol()==Symbol()&&OrderMagicNumber( )==1000){
 for(int i=OrdersTotal();i>0;i--){Alert ("i", i);
OrderSelect(i,SELECT_BY_POS );if(OrderType( )==OP_BUYSTOP){X++;}}}Alert ("X", X);
if (X==0){


   tiket= OrderSend( Symbol(), OP_BUYSTOP,  volume*A, price +otstup*Point, Point* 3, R1, price+takeprofit*Point+otstup*Point, "OP_BUYSTOP", 1000,  expiration, Red); 
   Alert ("OP_BUYSTOP", GetLastError( )); }
   
if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()) { 
 for ( i=OrdersTotal();i>0;i--){Alert ("i", i); OrderSelect(i,SELECT_BY_POS );
if(OrderType( ) ==OP_SELLSTOP) { Y++;}}}Alert ("Y", Y);
 if (Y==0){ 
   tikett= OrderSend( Symbol(), OP_SELLSTOP,  volume*A, price -otstup*Point, Point* 3,R2, price-takeprofit*Point-otstup*Point, "OP_SELLSTOP" , 2000,  expiration,C'0,128,255' );
    Alert ("OP_SELLSTOP", GetLastError( )); 
    }       
   
//----
   return(0);
  }
//+-------------------------------------------
在帮助中,它说

表达式2 是对循环结束条件的检查。如果为真,则执行for 循环主体操作。

等。我修复了所有的东西,但没有任何变化。还试着把i=5而不是i=OrdersTotal(),没有任何变化,循环不工作。
 
Dimka-novitsek:
帮助文本说

表达式2 是对循环结束条件的检查。如果为真,则执行for 循环主体操作。

等。我修复了所有的东西,但没有任何变化。还试着把i=5而不是i=OrdersTotal(),没有任何变化,循环不工作。

对了,循环不至于到了循环。

if(OrderSymbol()==Symbol()&&OrderMagicNumber( )==1000){
 for(int i=OrdersTotal();i>0;i--){Alert ("i", i);

你写道:"如果订单符号(哪个订单?有很多......或者根本没有)等于当前订单,并且其魔力(哪个订单?)等于1000,那么就执行循环"。

而你必须:"开始一个循环。在其中:1)选择一个订单。2)如果符号=......,并且魔法=1000,则X++;"

 

实际账户 中的一些DC为符号名称分配了各种前缀,如". "或 "FXF"。

我怎样才能使用这些前缀?

我是这样做的。

#define DEF_SPEC "FXF"

string SymbolsTrade[] = {"AUDCAD" DEF_SPEC ...-不起作用

string SymbolsTrade[] = {"AUDCAD "+DEF_SPEC ...-它也不像那样工作

结果我得到的只是FXF而不是AUDCADFXF。

你能告诉我如何实现这一点吗?
 
pusheax:

实际账户 中的一些DC为符号名称分配了各种前缀,如". "或 "FXF"。

我怎样才能使用这些前缀?

我这样做了。

#define DEF_SPEC "FXF"

string SymbolsTrade[] = {"AUDCAD" DEF_SPEC ...-不起作用

string SymbolsTrade[] = {"AUDCAD "+DEF_SPEC ...-它也不像那样工作

结果我得到的只是FXF而不是AUDCADFXF。

你能告诉我如何实现这一点吗?

好吧,这就是它在飞行中的作用。

#define DEF_SPEC "FXF"
string SymbolsTrade[] = {"AUDCAD", "EURUSD"};

int init()
{
   for (int i = 0; i < ArraySize(SymbolsTrade); i++)
      SymbolsTrade[i] = SymbolsTrade[i] + DEF_SPEC;
 

知道了,我去做......

另外,这个条件也不起作用。

OrderSelect(i,SELECT_BY_POS );
if(OrderType( ) ==OP_SELLSTOP) { Y++;}Alert ("Y", Y);}