欢迎访问

稳定三角套利三币对冲源码 -MT4/5金融交易/ 源码分享,欢迎提出修正

author emer | 22 人阅读 | 0 人评论 |

稳定三角套利三币对冲源码 -MT4/5金融交易/ 源码分享,欢迎提出修正 简介: 三角套利是同时开立三个货币对的订单。交易 三角套利是同时开立三个货币对的订单。交易方向和货币对的选择方式使得同时开立的头寸可以相互保险。因此,您可以开立相当大的手数,而且风险很低。 三角期权: EURUSD – USDJPY – EURJPY USDCAD – CADCHF – USDCHF EURGBP – GBPUSD – EURUSD AUDUSD – USDCAD – AUDCAD GBPAUD – AUDUSD – GBPUSD 总共有数百种期权,您可以使用 scripts-triangles 脚本来确定它们。他自己选择必要的三角形并将它们收集到一个文件中。EA顾问在三个指定的工具上开立三个头寸并控制它们的总利润。这种三角形中包含的头寸在不断移动。所有利润的金额都先增加,然后减少,不会超出大限度,即使在非常动荡的市场中也是如此。因此,无论价格如何变动,我们始终受到保障!一旦盈利额达到设定值,EA 就会关闭所有三个仓位。 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// cpp //+--------------------------------------------------------------------------------+ //| 专家顾问:三角对冲网格交易系统 | //| 版权 © 2023-2025, AI编程zblog | //| http://eawalk.com | //+--------------------------------------------------------------------------------+ #property copyright"Copyright © 2023, AI编程zblog " #propertylink "http://eawalk.com" #propertyversion "2.0" #property strict #propertydescription "优化版:三角对冲结合网格交易,带止损止盈和资金管理。" // 输入参数(EA 面板) extern stringSYMBOL1 = "GBPUSD"; // 第一货币对 extern stringSYMBOL2 = "USDJPY"; // 第二货币对 extern stringSYMBOL3 = "GBPJPY"; // 第三货币对 extern doubleBaseLot = 0.01; // 基础手数(网格起始手数) extern doubleLotMultiplier = 1.5; // 网格手数倍增系数 extern int GridStep = 20; // 网格间距(点数) extern int MaxOrders = 5; // 每货币对最大网格订单数 extern int TYPE1 = OP_BUY; // 第一货币对订单类型 (OP_BUY=买入, OP_SELL=卖出) extern int TYPE2 = OP_BUY; // 第二货币对订单类型 extern int TYPE3 = OP_SELL; // 第三货币对订单类型 extern int Magic = 777888; // 魔法数字(订单标识) extern doubleProfitClose = 10.0; // 总盈利目标(账户货币单位) extern doubleStopLoss = 50.0; // 止损(点数) extern doubleTakeProfit = 30.0; // 止盈(点数) string AC; //账户货币单位 // 初始化 int OnInit() { EventSetTimer(5); // 5秒定时器,减少CPU占用 AC =AccountCurrency(); return(INIT_SUCCEEDED); } // 主逻辑 void OnTick() {OnTimer(); } void OnTimer() { if(IsTesting() && OrdersTotal() == 0) { double ask = SymbolInfoDouble(Symbol(), SYMBOL_ASK); if (OrderSend(Symbol(), OP_BUY, BaseLot, ask, 1000, ask - StopLoss *Point, ask + TakeProfit * Point, "测试", Magic, 0, clrNONE) == -1) Print("测试错误:开单 ", Symbol(), ",错误:", GetLastError()); return; } doubleprofit1 = 0, profit2 = 0, profit3 = 0, totalProfit = 0; intcount1 = 0, count2 = 0, count3 = 0; // 各货币对订单数 // 计算盈利和订单数量 for(int i = 0; i < OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (Magic != OrderMagicNumber()) continue; string sym = OrderSymbol(); if (sym != SYMBOL1 && sym != SYMBOL2 && sym!= SYMBOL3) continue; double profit = OrderProfit() + OrderSwap() +OrderCommission(); if (sym == SYMBOL1) { profit1 += profit; count1++; } if (sym == SYMBOL2) { profit2 += profit; count2++; } if (sym == SYMBOL3) { profit3 += profit; count3++; } } } totalProfit = profit1 + profit2 + profit3; // 达到盈利目标时平仓 if(totalProfit >= ProfitClose) { CloseAllOrders(); return; } // 显示信息 Comment(TimeCurrent(), "n", SYMBOL1, " 盈利:",DoubleToString(profit1, 2), " ", AC, " 订单数:", count1, "n", SYMBOL2, " 盈利:",DoubleToString(profit2, 2), " ", AC, " 订单数:", count2, "n", SYMBOL3, " 盈利:",DoubleToString(profit3, 2), " ", AC, " 订单数:", count3, "n总盈利:", DoubleToString(totalProfit, 2), "", AC); // 管理网格交易 ManageGrid(SYMBOL1, TYPE1, count1); ManageGrid(SYMBOL2, TYPE2, count2); ManageGrid(SYMBOL3, TYPE3, count3); } // 关闭所有订单 voidCloseAllOrders() { for(int i = OrdersTotal() - 1; i >= 0; i--) { if (OrderSelect(i, SELECT_BY_POS)) { if (Magic != OrderMagicNumber()) continue; string sym = OrderSymbol(); if (sym != SYMBOL1 && sym != SYMBOL2 && sym!= SYMBOL3) continue; double closePrice = (OrderType() == OP_BUY) ? SymbolInfoDouble(sym,SYMBOL_BID) : SymbolInfoDouble(sym, SYMBOL_ASK); if (!OrderClose(OrderTicket(), OrderLots(), closePrice,1000, clrNONE)) Print("关闭订单错误 ", sym, ",错误:", GetLastError()); } } } // 网格交易管理 voidManageGrid(string symbol, int type, int orderCount) { if(orderCount >= MaxOrders) return; // 超过最大订单数不再开单 doublelastPrice = 0, currentPrice = (type == OP_BUY) ? SymbolInfoDouble(symbol,SYMBOL_BID) : SymbolInfoDouble(symbol, SYMBOL_ASK); doublelot = BaseLot * MathPow(LotMultiplier, orderCount); // 手数递增 // 查找最后一个订单的价格 for(int i = 0; i < OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS)) { if (Magic != OrderMagicNumber() || OrderSymbol() != symbol|| OrderType() != type) continue; lastPrice = OrderOpenPrice(); break; } } // 如果没有订单或价格偏离足够远,开启新订单 if(orderCount == 0 || MathAbs(currentPrice - lastPrice) >= GridStep *SymbolInfoDouble(symbol, SYMBOL_POINT)) { double openPrice = (type == OP_BUY) ? SymbolInfoDouble(symbol,SYMBOL_ASK) : SymbolInfoDouble(symbol, SYMBOL_BID); double sl = (type == OP_BUY) ? openPrice - StopLoss *SymbolInfoDouble(symbol, SYMBOL_POINT) : openPrice + StopLoss *SymbolInfoDouble(symbol, SYMBOL_POINT); double tp = (type == OP_BUY) ? openPrice + TakeProfit *SymbolInfoDouble(symbol, SYMBOL_POINT) : openPrice - TakeProfit *SymbolInfoDouble(symbol, SYMBOL_POINT); if (OrderSend(symbol, type, lot, openPrice, 1000, sl, tp, "网格对冲", Magic, 0,clrNONE) == -1) Print("开单错误 ", symbol, ",手数:",lot, ",错误:", GetLastError()); } } 2021-10-22_00-20-48-1.png SHAPE MERGEFORMAT SHAPE MERGEFORMAT

还没有人打赏,支持一下