KimIV的有用功能 - 页 15

 
KimIV:
B_Dima:
如果CCI值高于100,则开立买入头寸,直到该值低于-100,当它低于-100时,则开立卖出头寸,直到它高于100。

对于你,迪马,我可以建议这个功能。

int CCI_period=14;
int Applied_Price=PRICE_CLOSE;

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.24.2008                                                     |
//|  Описание : Возвращает торговый сигнал:                                    |
//|              1 - покупай                                                   |
//|              0 - сиди, кури бамбук                                         |
//|             -1 - продавай                                                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    nb - номер бара                 (    0       - текущий номер бара)      |
//+----------------------------------------------------------------------------+
int GetTradeSignal(string sy="", int tf=0, int nb=0) {
  if (sy=="" || sy=="0") sy=Symbol();
  double cci0=iCCI(sy, tf, CCI_period, Applied_Price, nb);
  double cci1=iCCI(sy, tf, CCI_period, Applied_Price, nb+1);
  int bs=0;

  if (cci1<=+100 && cci0>+100) bs=+1;
  if (cci1>=-100 && cci0<-100) bs=-1;

  return(bs);
}

这个函数在买入时返回1,卖出时返回-1。买/卖条件如你所愿。你现在需要做的就是在每次打勾时做以下工作。

1.获取GetTradeSignal()的值。

2.如果收到的值==0,则不做任何事情。

如果收到的值>0,则关闭所有销售并购买。

4.如果计算值小于0,则关闭所有交易并卖出。

:)))) 当然,谢谢你的帮助,但我的错误,我解释得不够准确,CCI指标的间隔为50,显示了方向和趋势的变化,当价格触及EMA8时,就会出现开盘,也会用止损和止盈等指标来判断修正。图片中的情况是,当CCI突破+100时,在触及EMA时开立买入头寸,CCI在哪里并不重要(+10或-20),主要的是当它越过-100时,开立卖出头寸。在穿越100根蜡烛和建立10个或更多头寸的时间跨度中,CCI>=+100和CCI<=-100可以穿越100根蜡烛。我希望它是清楚的。如果你有任何提示,我将很乐意帮助。

 
B_Dima писал (а):
我的错误,我没有解释得足够准确。

嗯...你的错误由你来纠正 :-)

我给你的方向是正确的。它将导致目标的实现。所以请继续...

 
KimIV:

如何使用ModifyOrder()函数的例子。

我决定举出以前被问过很多次的最开始的例子。这是在市场订单执行方面的开仓行为市场观察。它是指我们不能同时下达按市场价格开仓的指令,并将一个挂单附在上面。在Market Watch 上的这种开仓应该分两个阶段进行:首先,我们开一个头寸,然后给它附加一个挂单,即我们设置StopLossTakeProfit 价格水平。

1.买入当前符号的0.1手并设定30点的止损。

int ti=OpenPosition(NULL, OP_BUY, 0.1);
if (OrderSelect(ti, SELECT_BY_TICKET))
  ModifyOrder(-1, Ask-30*Point, -1, clModifyBuy);

2.卖出当前工具的0.15手,设置SL=45,TP=99

int ti=OpenPosition(NULL, OP_SELL, 0.15);
if (OrderSelect(ti, SELECT_BY_TICKET))
  ModifyOrder(-1, Bid+45*Point, Bid-99*Point, clModifySell);
预告片中包括一个带有实例的工作脚本。


伊戈尔,请再检查一下--该脚本不起作用。

1)在正常的经纪公司中,对未结订单的数量没有限制(无休止地打开)。

2)在经纪公司中,订单是在市场上打开的 - (错误131)。你可以测试一下,例如用NorthFinance。

 

这么多有用的功能摆在那里...也许有人想写一个模板,用来编写一个交易EA,可以根据用户定义的条件,打开和关闭挂单、头寸,设置止盈和止损,修改订单和头寸。这样的模板将允许你快速编写一个EA,其中只有条件块被改变(当然,这部分将由用户根据策略插入)。


如果有来自金的有用的功能,即在使用上有一定的通用性标准,那么为什么不把来自金的交易EA的模板代码布置出来......

 
Set777 писал (а):
伊戈尔,请再次检查 - 脚本不工作:
1)在正常的经纪公司中,对未结订单的数量没有限制(无限打开)
2)在经纪公司中,订单由市场打开 - (错误131)。你可以测试一下,例如NorthFinance。

1.脚本中没有对开仓数量的检查。你运行脚本多少次,它将打开多少个位置。

错误131 -数量不正确,批量大小。可能是0.15,用0.2代替。

 
kharko писал (а):
这么多有用的功能布置...

还没有达到我心中所想的五分之一......我将在这里让大家感到无聊,直到秋天。所以请忍受我...

kharko 写道(a):
也许有人想写一些写交易顾问的模板,它可以根据用户定义的条件,打开和关闭挂单、头寸,设置止盈和止损,修改订单和头寸...
模板...模板...好主意!谢谢你!但首先是功能...
 

DistMarketAndPos()函数。

我们来了!更多有趣的功能来了!例如,它返回市场和最近的位置之间的距离,单位是点。更准确地选择要检查的位置是由外部参数设定的。

  • sy- 仪器的名称。如果设置了这个参数,函数将只检查指定仪器的位置。""或NULL表示当前仪器。
  • op- 贸易操作,职位类型。有效值:OP_BUY、OP_SELL或-1。默认值-1意味着任何位置。
  • mn- 位置标识符(MagicNumber)。默认值-1 - 任何MagicNumber。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает расстояние в пунктах между рынком и ближайшей       |
//|             позицей                                                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    op - торговая операция          (    -1      - любая позиция)           |
//|    mn - MagicNumber                (    -1      - любой магик)             |
//+----------------------------------------------------------------------------+
int DistMarketAndPos(string sy="", int op=-1, int mn=-1) {
  double d, p;
  int i, k=OrdersTotal(), r=1000000;

  if (sy=="" || sy=="0") sy=Symbol();
  p=MarketInfo(sy, MODE_POINT);
  if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy) && (op<0 || OrderType()==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (OrderType()==OP_BUY) {
            d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
          if (OrderType()==OP_SELL) {
            d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
        }
      }
    }
  }
  return(r);
}
 

使用DistMarketAndPos()的例子。

为什么需要一个函数来确定市场离最近的位置有多远?我看到至少有四个基本选择。

  1. 买过或卖过。市场已经朝着我们的方向发展了。而一旦它通过了一些距离,现有的头寸获得了一些利润,我们立即进行存款--在同一方向再次进入。
  2. 我们购买或出售。市场朝着我们的方向发展。一旦它走过了一定的距离,而现有的头寸也获得了一定的利润,我们就会立即意识到,就是这样了!"。逆转就在眼前!是时候翻转了。我们关闭目前的头寸,并在相反的方向开仓。
  3. 我们购买或出售。市场已经转向对我们不利。但出于某种原因,我们确信自己是对的,在离最近的进场点有一定距离时,也就是在某种程度的亏损时,我们的平均水平和开盘方向是一致的。
  4. 我们购买或出售。市场已经对我们不利。而且我们已经意识到,我们进入市场的方式不正确。因此,我们固定在某一水平的损失上,并在另一方向打开。

如果你想具体实现这些选项中的任何一个,请在这里写下你的请求。我将在我所列举的框架内满足所有要求。

附上一个实验DistMarketAndPos()函数的模板。

附加的文件:
 
亲爱的 KimIV 在你的专家顾问e-TFL_v2idPriceLevel() 函数中,有一个错误:在最后一个条件中,gdUpPrice==0 重复了两次。 可能在第二种情况下,你想写成gdDnPrice==0。出于某种原因,该EA在可视化模式下的策略测试器中可以工作,但模拟账户的头寸却没有打开,尽管评论中告知了买入和卖出水平。也许你可以告诉我什么是错的。
 
khorosh:
e-TFL_v2 专家顾问中的bool idPriceLevel() 函数有一个错误:gdUpPrice==0 在最后一个条件中重复了两次,你可能想在第二种情况下写gdDnPrice==0

谢谢你!我已将e-TFL_v2 的修正版上传到网站。


khorosh
出于某种原因,该EA在我的策略测试器中以可视化模式运行,但在模拟账户中却不能开仓,尽管它在评论中报告了买入和卖出水平。也许你可以告诉我这是什么问题。

我不知道......我刚刚在NorthFinance演示中完成了对该专家顾问的测试。昨天我在莫斯科的朋友给我打电话。他抱怨的是同一个专家顾问。他说,它按线开仓,然后越来越多,直到你停下来,开了很多仓。因此,有两个测试的目标。

1.关于你的问题。检查一般功能。

2.关于我朋友的问题。我只从一条线上开了一个头寸。

为了检查它,我把e-TFL_v2 专家顾问放在5分钟时间段的EURUSD、GBPUSD、USDCHF和USDJPY。使用趋势线,我在最后20-30个柱子上画了通道。结果,专家顾问如愿以偿地工作了。欧元从底线被买入,而日元从顶线被卖出。对于磅数和糜费,一切也都是正确的。所以你应该自己去检查。专家顾问的工作。