自己通过教学编写的海龟资金管理,但是好像无法在EA当中准确获取应该建立的海**寸,希望可以得到前辈的指点。
以下部分为源码:
- //---海龟资金管理
- double turtle_Lots(string symbol,int turtle)
- {
- double lots = 0; // 初始仓位
- double total_money = accountInfo.Equity(); // 账户净值
- double turtle_Money = 0; // 海龟投入的资金总额
- if(turtle_Money <= 0) return 0;
-
- int digits = (int)SymbolInfoInteger(symbol,SYMBOL_DIGITS); // 获取指定交易品种的点值
- double n = NormalizeDouble(MathAbs(ATR[1]),digits) / point; // 将ATR值转为整点值
- if(n < 0) return 0;
-
- //---获取点值
- double tickVal = SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_VALUE);
- if(tickVal <= 0) return 0;
-
- //---计算手数 = 海龟资金投入总额/ATR/点值
- lots = NormalizeDouble(turtle_Money/n/tickVal,digits);
-
- //---进行规范化处理
- double lotstep = SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP); // 获取交易执行的最小成交量???翻译感觉不是很准确
- lots = MathRound(lots/lotstep) * lotstep;
-
- // 判断是否超过持仓限制
- double minVolume = SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN);
- double maxVolume = SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX);
-
- if(lots >= minVolume && lots <= maxVolume)
- return true;
-
- return lots;
- }
复制代码
|