请指导我有关传播的问题 - 页 4

 
deysmacro:
但你必须记住。EA只关闭运行中的交易。你必须自己打开交易。

100%,没问题,这正是我想达到的目的......我不想让EA打开任何交易,那是我的工作......我只想让它在超过2个订单以X利润打开时关闭它,并且必须考虑价差慢慢地,我已经开始接近它了......这个编程的东西应该在学校里教......嘿嘿,可惜我是80年代的人,从来没有想过我要经历这些,但我越读帮助文件,我发现它越来越吸引人了......另外,这个论坛有很多帮助,感谢像你这样的人。
 
tatyawinchu:

如果我可以添加一个IF循环,然后粘贴下面的其余代码,开始循环呢?

IF条件应该检查OrdersTotal是=>2,这样控制权就会被传递给所有未平仓的订单,在点差后的X利润处关闭?



我不确定你说的"IF条件应该检查 OrdersTotal是=>2,这样控制权就会被传递给所有未平仓的订单,在点差后的X利润处平仓 "的真正含义。

但我敢肯定,如果你尝试,不会发生什么坏事。如果它不工作,也没有什么损失。至少你试过了。

 
tatyawinchu:

100%,没有问题,这正是我想实现的......我不想让EA开出任何交易,那是我的工作......我只想让它在超过2个订单在X利润的情况下关闭它,并且必须考虑点差慢慢地,我已经开始接近它了......这个编程的东西应该在学校里教......嘿嘿,可惜我是80年代的人,从来没有想过我要经历这些,但我越读帮助文件,我发现它越来越吸引人了......另外,这个论坛有很多帮助,感谢像你这样的人。

只要在totalprofit中包括传播。
 
thrdel:


我不确定你说的"IF条件应该检查OrdersTotal是否=>2,这样控制权就会被传递给所有未平仓的订单,在点差后以X的利润平仓 " 是什么意思?

但我敢肯定,如果你尝试,不会发生什么坏事。如果它不工作,也没有什么损失。至少你试过了。


我不确定你说的 "IF条件应该检查OrdersTotal是否=>2,这样控制权就会被传递给所有未平仓的订单,在点差后的X利润处平仓 "什么意思

嗯,好的,我的意思是

如果......未平仓订单总数大于或等于2......才会继续并遵循其余的代码。

如果未结订单总数...[OrdersTotal()?]...小于2...这意味着要么是1,要么是0,那么什么都不做...。

现在,对我来说有一个问题,mql 4的帮助文件说OrdersTotal()计算所有的订单,市场订单和挂单订单......我试图寻找一些函数,它可以只获得实时市场订单,而不是挂单订单,或者,它可以通过数学计算,因为大多数情况下,我一次最多有两个交易。

这样的解释是否更清楚?

谢谢你给我的时间。

 

thrdel 想让你先试试,看看会发生什么,虽然我很确定可能会发生什么。

 
deysmacro:

thrdel 希望你先试试,看看会发生什么。



是的,通过帮助文件找到适当的功能,它只提供开放订单。
 
当你设法完成它时,向我们展示你的代码,如果可以的话,我们会帮助你。
 
deysmacro:
当你设法完成它时,请向我们展示你的代码,如果可以的话,我们会帮助你。

收到了!谢谢...

..

我没有找到一个只返回开仓交易的函数......这很好,所以我添加了如下的IF循环。

//+------------------------------------------------------------------+
//|                    CloseTrades_After_Account_Profit_Reached.mq4  |
//|                                     Copyright © 2007, Tradinator |
//|                                          tradinator.fx@gmail.com |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2007, Tradinator"
#property link      "tradinator.fx@gmail.com"


                                       
extern double My_Money_Profit_Target=100;     //The amount of money profit at which you want to close ALL open trades.
extern string Profit_Target= "Enter above To Close all OPEN trades when amount of profit is Reached in Account and not per OPEN trade! ";
                                          
int Slippage=5;
int i;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+


int start()

//+------------------------------------------------------------------+
//| This is just the single line of code that I have added
//+------------------------------------------------------------------+
{ 
 if (OrdersTotal()>=2)

 {
   if (AccountProfit()>= My_Money_Profit_Target)
   {
    for(i=OrdersTotal()-1;i>=0;i--)
       {
       OrderSelect(i, SELECT_BY_POS);
       int type   = OrderType();
               
       bool result = false;
              
       switch(type)
          {
          //Close opened long positions
          case OP_BUY  : result = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),Slippage,Pink);
                         break;
               
          //Close opened short positions
          case OP_SELL : result = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),Slippage,Pink);
                          
          }
          
       if(result == false)
          {
            Sleep(0);
          }  
       }
      Print ("Account Profit Reached. All Open Trades Have Been Closed");
      return(0);
   }  
   
   Comment("Balance: ",AccountBalance(),", Account Equity: ",AccountEquity(),", Account Profit: ",AccountProfit(),
           "\nMy Account Profit Target: ",My_Money_Profit_Target);
   
  return(0);
   }
 }

我在开始时添加了IF条件,即如果 (OrdersTotal()>=2)......[在上述代码中突出显示了注释] 。

现在,关闭{}有问题,因为在第一次尝试时,我试着把它改为

{ 
 if (OrdersTotal()>=2)
}

 {
   if (AccountProfit()>= My_Money_Profit_Target)
   {
    for(i=OrdersTotal()-1;i>=0;i--)
       { .. etc etc 
     

因此,作为一个第一次编写代码的人,我试图把这个if条件放在第一个被检查的地方......没有编译。

所以我把{}关闭,把条件放在里面,现在编译时只有两个警告,没有错误。

应该检查'OrderSelect'的返回值 Testcode 1.mq4 56 8

不是所有的控制路径都返回一个值 Testcode 1.mq4 86 2

所以它可以编译......在逻辑上是否正确?

[另外,没有删除任何版权信息,我只是添加了一行,删除他的细节对我来说是完全不公平的......关于这个规则是什么?]

 
tatyawinchu:

是的,通过帮助文件找到了适当的功能,该功能只提供开放的订单。


真的很抱歉,正如我之前所说,我真的不擅长解释。我知道你想找到一个只计算未平仓的买单或卖单 的函数,我让你看看我的代码,我尽我所能向你解释,但没有我希望的那样好。

你还记得我提到的关于该代码的第一个步骤吗?

它是:CountMyOrders。现在,如果你按照我的要求看一下这段代码,你会发现以下情况

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CountMyOrders()
  {
   myOrders=0;
   for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)
     {
      if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==false)
         Print("Failed to select order, error : "+ErrorDescription(GetLastError()));
      //skip orders placed by other EA's
      if(OrderMagicNumber()>0)continue;
      if(OrderType()==OP_BUY || OrderType()==OP_SELL)
        {
         myOrders++;
        }
     }
   return(myOrders);
  }

它说。

if(OrderType()==OP_BUY || OrderType()==OP_SELL)

你必须知道OP_BUY和OP_SELL是什么意思。

没有挂单,没有开放的买入止损,没有开放的卖出止损,没有买入限制或卖出限制,只有开放的买入和卖出。

我还能怎样更好地解释这段代码和它的作用呢?

你可以继续搜索文档,熟悉它,但我可以告诉你,你要找的功能不在那里。

我的EA说,如果还没有订单,就等待。

if(myOrders<1)

你想让你的等待2个订单。如果你稍微注意一下我说的话,你可能会注意到,你所需要做的就是 。

if(myOrders<2)

Voilla。现在它在等待2个订单到位--没有挂单,只有买入或卖出!

请理解,我试图把代码放在一起,以适应其他人可能正在寻找的管理未平仓交易的方法,而不是为特定目的的定制设计。

它的目的是作为一个例子,把你认为好的东西拿出来,其余的不要,改进它,改变它,如果你能从它身上学到东西并进行实验。

希望这有意义。

 
thrdel:


真的很抱歉,正如我之前所说,我真的不擅长解释。我知道你想找一个只计算未平仓的买单或卖单的函数,我让你看看我的代码,我尽我所能向你解释,但并不像我希望的那样好。

你还记得我提到的关于该代码的第一个步骤吗?

它是:CountMyOrders。现在,如果你按照我的要求看一下这段代码,你会发现以下情况

它说。

你必须知道OP_BUY和OP_SELL是什么意思。

没有挂单,没有开放的买入止损,没有开放的卖出止损,没有买入限制或卖出限制,只有开放的买入和卖出。

我还能怎样更好地解释这段代码和它的作用呢?

你可以继续搜索文档,熟悉它,但我可以告诉你,你要找的功能不在那里。

我的EA说,如果还没有订单,就等待。

你想让你的等待2个订单。如果你稍微注意一下我说的话,你可能会注意到,你所需要做的就是 。

Voilla。现在它在等待2个订单到位--没有挂单,只有买入或卖出!

请理解,我试图把代码放在一起,以适应其他人可能正在寻找的管理未平仓交易的方法,而不是为特定目的的定制设计。

它的目的是作为一个例子,把你认为好的东西拿出来,其余的不要,改进它,改变它,如果你能从它身上学到东西并进行实验。

希望这有意义。

谢谢......首先,不是你!是我!嘿嘿,我是这里的新手......你的解释很完美!只是现在有点难以消化,因为我正在一步一步地......一个字一个字地阅读帮助文件=),并在我遇到困难时寻求帮助......相反,现在因为你的代码,我正在阅读帮助文件中的功能部分!另外,你能不能把我上面粘贴的代码编译到你那里,看看那个IF条件的逻辑是否有什么问题?让我们现在忽略它计算所有的订单......比如说,如果这个EA在没有订单的情况下被执行,然后第一个订单被打开,一段时间后其他订单被触发......这个IF条件的逻辑流程是否正确?另外,我现在几乎可以肯定,这段代码只需要修正一行或类似的内容[另外,我放弃了将此作为工作发布的想法......],我不必复杂地扫描是否省略其他EA的订单,因为对我来说,这将是唯一运行的EA,所以我不必专门为每个订单分配神奇的数字等......现在我只需要找出我的IF的逻辑是否正确^^。