网格制作者1.1 - 页 3 123456 新评论 Forex Trader 2005.07.07 19:18 #21 再次问好 谢谢你的回答,我回家后会加你的。 Forex Trader 2005.07.07 21:38 #22 我发现这段代码有时会出现问题,无法保持完美的网格(至少当我以回撤而不是突破网格的方式运行时)。 我见过洞的形成和不被更新,我见过网格有时不完全形成所有10个订单。 另外,它似乎不喜欢更新时间设置得很短,我不明白为什么。 似乎15分钟对于更新一个网格来说太长了(更像是15秒!),所以这是一个大问题。 如果你有这方面的经验,我将非常感激。 不过,能把这个事情办好,是件了不起的事情。 不错的工作。 Forex Trader 2005.07.07 22:41 #23 索玛。 你是对的,有人向我指出了一个错误,似乎已经修复了。 这是新版本。我还将间隔时间改为1分钟--但我认为15至30分钟更好......这将避免市场真正快速移动时的一些反交易。 问候。 //+------------------------------------------------------------------+ //| MakeGrid.mq4 | //| Copyright © 2005, hdb | //| http://www.dubois1.net/hdb | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, hdb" #property link "http://www.dubois1.net/hdb" //#property version "1.4beta" extern string GridName = "Grid"; // 识别网格。允许几个并存的网格 extern double Lots = 0.1; // extern double GridSize = 6; // 订单之间的点数 - 网格或网格大小 extern double GridSteps = 12; // 下订单的总数 extern double TakeProfit = 6 ; // 获利的点数。通常是=网格大小,但你可以覆盖 extern double StopLoss = 0; // 如果你想添加止损。正常的网格不使用止损,而双倍的UpdateInterval = 1; //每隔x分钟更新一次订单 extern bool wantLongs = true; //我们是否需要多头头寸 extern bool wantShorts = true; //我们是否需要空头头寸 extern bool wantBreakout = true; //我们是否需要高于价格的多头,低于价格的空头 extern bool wantCounter = true; //我们是否需要低于价格的多头,高于价格的空头 extern bool limitEMA34 = false; //我们是否希望多头只在ema以上,空头只在ema以下 extern double LastUpdate = 0; //用于记录最后一次更新时间的计数器 extern double GridMaxOpen = 0; //最大开仓数 //+------------------------------------------------------------------+ //|专家初始化函数 | //+------------------------------------------------------------------+ int init() { //---- #属性 show_inputs //显示参数 - 谢谢 Slawa... if ( TakeProfit <= 0 ) // { TakeProfit = GridSize; } //---- return(0); } //+------------------------------------------------------------------------+ //| 测试在atRate区域是否有未结头寸或订单 | //| 如果checkLongs为真将检查多头,否则将检查 | //| 短头 | //+------------------------------------------------------------------------+ bool IsPosition(double atRate, double inRange, bool checkLongs ) { int totalorders = OrdersTotal( ); for(int j=0;j<totalorders;j++) // 扫描所有订单和仓位。... { OrderSelect(j, SELECT_BY_POS); if ( OrderSymbol()==Symbol() && OrderComment() == GridName ) //只看mygrid和符号...... { int type = OrderType(); if (MathAbs( OrderOpenPrice() - atRate ) < inRange) //不看精确价格,但看价格的接近程度(小于网格大小) { if ( ( checkLongs && ( type == OP_BUY || type == OP_BUYLIMIT || type == OP_BUYSTOP ) ) || (!checkLongs && ( type == OP_SELL || type == OP_SELLLIMIT || type == OP_SELLSTOP ) ) { return(true); } } } return(false); } //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ int start() { //---- int i, j,k, ticket, entermode, totalorders; bool doit; double point, startrate, traderate; //---- if (MathAbs(CurTime()-LastUpdate)> UpdateInterval*60) // we update the first time it is called and every UpdateInterval minutes { LastUpdate = CurTime(); Print("Updating"); point = MarketInfo(Symbol(),MODE_POINT); startrate = ( Ask + point*GridSize/2 ) / point / GridSize; // 取整为可被GridSize划分的点数 k = startrate ; k = k * GridSize ; startrate = k * point - GridSize*GridSteps/2*point 。 //计算最低进入点 double EMA34=iMA(NULL,0,34,0,MODE_EMA,PRICE_CLOSE,0); for( i=0;i<GridSteps;i++) { traderate = startrate + i*point*GridSize; if ( wantLongs && ( !limitEMA34 || traderate > EMA34)) { if ( IsPosition(traderate,point*GridSize,true) == false ) // 测试我是否有接近我的价格的未结订单:如果有,就放一个 { double myStopLoss = 0; if ( StopLoss > 0 ) { myStopLoss = traderate-point*StopLoss ; } if ( traderate > Ask ) { entermode = OP_BUYSTOP; } 否则 { entermode = OP_BUYLIMIT ; } 如果((traderate > Ask ) && (wantBreakout))|| ((traderate <= Ask ) && (wantCounter)) ) { ticket=OrderSend(Symbol(),entermode,Lots,traderate,0,myStopLoss,traderate+point*TakeProfit,GridName,16384,0,Green); } } if ( wantShorts && ( ! limitEMA34 || traderate < EMA34)) { if ( IsPosition(traderate,point*GridSize,false)== false ) //测试我是否有接近我的价格的未平仓订单:如果有,就放一个 { myStopLoss = 0; if ( StopLoss > 0 ) { myStopLoss = traderate+point*StopLoss ; } if ( traderate > Bid ) { entermode = OP_SELLLIMIT; } 否则 { entermode = OP_SELLSTOP ; } 如果 ( ( (traderate < Bid ) && (wantBreakout) )|| ((traderate >= Bid ) && (wantCounter)) ) { ticket=OrderSend(Symbol(),entermode,Lots,traderate,0,myStopLoss,traderate-point*TakeProfit,GridName,16384,0,Red); } } } return(0); } //+------------------------------------------------------------------+ Help: How to write Grid maker 1.1 如何编码? Forex Trader 2005.07.08 16:34 #24 谢谢,hdb。 但也许我没有完全理解你对网格的看法,因为我看不出更新过早会有什么不好的理由。 漏掉一个条目会使网格无法充分发挥其潜力。 当我手动运行它时,我在任何变化的时候都会更新订单。 我运行的是回撤网格,而不是突破网格,所以也许这就是差异所在,但是对于回撤,你会从波动中获利,所以保持网格没有漏洞是最理想的。 Forex Trader 2005.07.08 19:51 #25 Soma, 是的,也许你是对的......所以最好是经常更新,但只有几个格子的位置。我没有强烈的意见。 参考资料。 Forex Trader 2005.07.11 20:31 #26 好吧,我一直在等待一个有利的时机来发布网格的更新--因为它最近的表现真的很糟糕。 在我上次更新后的一周,我在度假,网格被停止。上周,电网大部分时间都在运行。 当利用保证金为零时,我关闭了几次,并在大多数主力上设置了 "只做多"。 今天是超级复出的一天。 余额 : 93 (自10天前起+10) 已用保证金 : +15k 可用保证金 : +28k 虚幻的P&L : -49k (自10天前起-11) 余额 : 44k 净值比10天前少了1千,比起始余额少了5千。 这一切真正困难的部分是试图限制缩减。我真的必须找到方法来做到这一点! Forex Trader 2005.07.12 11:05 #27 我认为避免下跌的唯一方法是使用酌情处理的方法 即知道何时停止增加订单,何时像你一样停止增加空头头寸。 在开始的时候,由于使用了过大的手数,被迫关闭了大量的头寸,导致了10万的余额。 余额:97 594.19 大约2周前的余额为83K 自由保证金: 6 016.88 浮动盈亏:-38 960.45和-56000一样糟糕 保证金:52 616.86 在过去的几天里,保证金水平一直非常缓慢,低至93%。 但现在,所有的主力似乎都在疯狂的转身,目前 保证金水平回升到130%左右 Forex Trader 2005.07.12 13:20 #28 同意,darkstonexa,我认为你可能是对的 - 但我正在测试一些基于EMA和MACD 的自动变化......虽然我不是很乐观。 我的一个朋友也有一个带止损的自动交易系统......而且它正在努力保持浮动!但这确实解决了缩减的问题! 同时,我清理了我的头寸--所有带有强烈的负结转利息且亏损严重(几百点)的头寸都被关闭。 因此,我的网格现在已经准备好迎接另一次打击(保证金契约为430%)! Forex Trader 2005.07.13 13:43 #29 我们度过了多么美好的两天啊......在经历了几周的灾难性交易后,昨天我的网格又增加了5千的绿色(资产是54千,我从49千开始)。 幸运的是,我们可以在模拟账户 上进行尝试! 现在我回到了一个 "合理 "的位置,我把所有的货币对都设置成了以下情况。 1)只在正利差的方向上交易(除非利差接近0,否则就双向交易)。 2)只在34ema以上做多,只在34ema以下做空 3)对于双向货币,使用5分钟图上的macd来决定是做多还是做空。 我们将看看这能带来什么! ps.我希望后面的测试能起作用! Forex Trader 2005.07.18 11:28 #30 你好,hdb。 我在欧元兑美元上使用了您的顾问,交易双方都是突破性的。 现在我想问问您,您是否已经遇到了以下问题。 一段时间后,我在一些相同的网格位置上有一个以上的订单。有时是两个,但我也见过5个或更多。 就我对代码的理解而言,一个网格位置上一次只能有一个订单开放。 在比较之前,我已经把所有的双数转换成了英数,因为在MQL2中,我发现在比较双数值时有类似的问题。 你是否遇到过类似的情况? 请注意。 cori 123456 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
谢谢你的回答,我回家后会加你的。
你是对的,有人向我指出了一个错误,似乎已经修复了。 这是新版本。我还将间隔时间改为1分钟--但我认为15至30分钟更好......这将避免市场真正快速移动时的一些反交易。
问候。
是的,也许你是对的......所以最好是经常更新,但只有几个格子的位置。我没有强烈的意见。
参考资料。
在我上次更新后的一周,我在度假,网格被停止。上周,电网大部分时间都在运行。
当利用保证金为零时,我关闭了几次,并在大多数主力上设置了 "只做多"。
今天是超级复出的一天。
余额 : 93 (自10天前起+10)
已用保证金 : +15k
可用保证金 : +28k
虚幻的P&L : -49k (自10天前起-11)
余额 : 44k
净值比10天前少了1千,比起始余额少了5千。
这一切真正困难的部分是试图限制缩减。我真的必须找到方法来做到这一点!
即知道何时停止增加订单,何时像你一样停止增加空头头寸。
在开始的时候,由于使用了过大的手数,被迫关闭了大量的头寸,导致了10万的余额。
余额:97 594.19 大约2周前的余额为83K
自由保证金: 6 016.88
浮动盈亏:-38 960.45和-56000一样糟糕
保证金:52 616.86
在过去的几天里,保证金水平一直非常缓慢,低至93%。
但现在,所有的主力似乎都在疯狂的转身,目前
保证金水平回升到130%左右
我的一个朋友也有一个带止损的自动交易系统......而且它正在努力保持浮动!但这确实解决了缩减的问题!
同时,我清理了我的头寸--所有带有强烈的负结转利息且亏损严重(几百点)的头寸都被关闭。
因此,我的网格现在已经准备好迎接另一次打击(保证金契约为430%)!
幸运的是,我们可以在模拟账户 上进行尝试!
现在我回到了一个 "合理 "的位置,我把所有的货币对都设置成了以下情况。
1)只在正利差的方向上交易(除非利差接近0,否则就双向交易)。
2)只在34ema以上做多,只在34ema以下做空
3)对于双向货币,使用5分钟图上的macd来决定是做多还是做空。
我们将看看这能带来什么!
ps.我希望后面的测试能起作用!
我在欧元兑美元上使用了您的顾问,交易双方都是突破性的。
现在我想问问您,您是否已经遇到了以下问题。
一段时间后,我在一些相同的网格位置上有一个以上的订单。有时是两个,但我也见过5个或更多。
就我对代码的理解而言,一个网格位置上一次只能有一个订单开放。
在比较之前,我已经把所有的双数转换成了英数,因为在MQL2中,我发现在比较双数值时有类似的问题。
你是否遇到过类似的情况?
请注意。
cori