[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 224

 

请帮助我改变我的EA代码中的资金管理。

在我的EA中,有两个条件

1 - 最低手数+与固定手数合作,或2 - 按可用资金的百分比增加手数

我希望在第一次交易失败后,手数增加0.01手,或在第二次交易失败后增加0.02手。

而在第三次亏损后,这批货又是最小的。

我需要可以粘贴到我的EA中的函数(最好是尽可能的简单)。

我试图通过include(lot_lib)把代码放进去,它产生了很多错误,不能工作。

预先感谢您的时间!


 

你好!

我在写代码,重点是把止损位放在过去三个柱子的最低/最高点。以下是所得到的结果。

double FindSL(int mode)
   {
    double sl; //уровень стоплосса
    double buf; //буфер
    double lvl1, lvl2, lvl3; //выборка из 3-х последних баров
    if (mode == 1) //покупали
      {
       lvl1 = iLow(symb, 0, 0);
       lvl2 = iLow(symb, 0, 1);
       lvl2 = iLow(symb, 0, 2);
       buf = MathMin(lvl1, lvl2); //ищем низ
       sl = MathMin(buf, lvl3);
      }
    else if (mode == 2) //продавали
      {
       lvl1 = iHigh(symb, 0, 0);
       lvl2 = iHigh(symb, 0, 1);
       lvl3 = iHigh(symb, 0, 2);
       buf = MathMax(lvl1, lvl2); //ищем вершину
       sl = MathMax(buf, lvl3);
      }
    return (sl);
   }

订单是由以下代码打开的。

int OpenOrder(int sell_or_buy)                                  //Открытие ордеров
   {
    GetLot();

     if(sell_or_buy==2)                                          //покупка
       {
        StopLoss = FindSL(1);
        OrderSend(symb, OP_BUYSTOP, Lots, iHigh(symb, 0, 1), 0, StopLoss, 
        iHigh(symb, 0, 1)+TakeProfit*Point, "Ichimoku Simple Adviser Trade", 1001, TimeCurrent()+ExpirationTime, Green);    
        return (1);
       }
     else if (sell_or_buy==1)                                    //продажа
       {
        StopLoss = FindSL(2);
        OrderSend(symb, OP_SELLSTOP, Lots, iLow(symb, 0, 1), 0, StopLoss, 
        iLow(symb, 0, 1)-TakeProfit*Point, "Ichimoku Simple Adviser Trade", 1001, TimeCurrent()+ExpirationTime, Red);
        return (1);
       }
     else {return (0);}
   } 

StopLoss是一个全局变量

在测试时,会有一个时刻,资金耗尽,一下子在一个交易中。批量很小,所以唯一的问题是,由于某种原因没有设置止损(等于0)。

我搞不清楚错误是什么。

请看一下代码,我哪里会犯错?

 
gogent:

你好!

我在写代码,重点是把止损位放在过去三个柱子的最低/最高点。以下是所得到的结果。

订单是由以下代码打开的。

StopLoss是一个全局变量。

在测试时,会有一个时刻,资金耗尽,一下子在一个交易中。批量很小,所以唯一的问题是,由于某种原因没有设置止损(等于0)。

我搞不清楚错误是什么。

请看一下代码,我可能在哪里犯了错误?

购买后,止损 始终为0。

原因:没有定义变量lvl3(机械错误)。

 

你好。

我正在处理传播问题。差价总是对我不利。所以我应该把它加入到止损中,并从止盈中 减去它?因此,如果我想获得50点的净利润(例如,货币对的3点点差),这意味着我必须在订单中设置53点的获利。如果我的净损失为50点,那么应该给出47点的止损。我说对了吗?

提前感谢!

 
01123456789:

你好。

我正在处理传播问题。差价总是对我不利。所以我应该把它加入到止损中,并从止盈中减去它?因此,如果我想获得50点的净利润(例如,货币对的3点点差),这意味着我必须在订单中设置53点的获利。如果我的净损失为50点,那么应该给出47点的止损。我说对了吗?

提前感谢!


你好!

如果我们谈论的是你的计划和期望,那就对了。

如果我们从形式上讲,我不清楚什么叫 "按顺序......"。" 奉命......"

 

你好!帮我解决一个自定义函数的问题。

我的理解是:如果条件为真,它返回的是isitpik-(真)。该条件是从AO的计算所在的第0个缓冲区开始计算的。或者只有最后一个i-bar在缓冲区内,当这些条件出现时,(true)被传递给isitpik()?为什么要给变量(i)分配int类型,如果它是由上述条件完成的。


bool isitpik( int i )
   {
   if(ExtBuffer0[i]>0 && ExtBuffer0[i]>ExtBuffer0[i+1] && ExtBuffer0[i]>ExtBuffer0[i-1])return(true);
   if(ExtBuffer0[i]<0 && ExtBuffer0[i]<ExtBuffer0[i+1] && ExtBuffer0[i]<ExtBuffer0[i-1])return(true);
   }
 
tara:


你好!

如果是关于你的计划和期望,这很好。

如果我们从形式上讲,我不清楚 "在一个订单中......指定获利=53点 "是什么意思。

当我说。"我的意思是一个挂单(例如,买入止损),有两栏止损和止盈。也就是说,如果我想获得50点的利润,我应该在挂单中指定53点的获利,而不是50点,因为3点会影响点差。对吗?
 
01123456789:
通过说。"我的意思是一个挂单(例如,买入止损),有两栏止损和止盈。也就是说,如果我想获得50点的利润,我应该在挂单中指定53点的获利,而不是50点,因为3点会影响点差。对吗?

在订单中,TP和SL应该以价格而不是以点数来指定。
 
01123456789:
通过说。"我的意思是一个挂单(例如,买入止损),有两栏止损和止盈。也就是说,如果我想获得50点的利润,我应该在挂单中指定53点的获利,而不是50点,因为3点会影响点差。对吗?
每家经纪公司的合同中都有这一条。买入订单沿着卖出线关闭,卖出订单沿着买入线关闭。所有你理解正确。 根据点差,你将把它加到你的利润中。如果你想获得50点,你将获得+3(取决于货币对的点差)。 不要忘记,所有的图表都是由Bid绘制的。
 
deyron:
每个经纪公司的合同中都有这个规定。买入订单在卖出线关闭,卖出订单在买入线关闭。
是这样吗?在我看来,你似乎搞错了。买入订单在卖出价上打开,在买入价上关闭。卖单由买入线打开,由卖出线关闭。换句话说,如果我们买入(卖出价),我们通过卖出(买入价)结束交易。