MT5和trans2quik.dll - 页 13 1...6789101112131415161718 新评论 prostotrader 2019.02.20 15:50 #121 BillionerClub:没有LUA的完整C++代码呢?所以在上面的电影中,没有LUA,只有不是C++而是Pascal(Delphi XE4)。 Sergey Chalyshev 2019.02.20 19:52 #122 prostotrader:所以在上面的电影中,没有LUA,只有不是C++而是Pascal(Delphi XE4)。刹车不干涉吗? 关于交易、自动交易系统和交易策略测试的论坛 MT5和trans2quik.dll prostotrader, 2019.02.15 18:42 关于通过快速交易,你可以像做恶梦一样忘记它。 Ордер SRH9 отправлен: 15.02.19 20:30:12 Ордер SRH9 исполнился: 15.02.19 20:30:12 (62 мс) Ордер SBER отправлен: 15.02.19 20:30:12 Ордер SBER исполнился: 15.02.19 20:30:13 (562 мс) Ордер SRH9 отправлен: 15.02.19 20:30:13 Ордер SRH9 исполнился: 15.02.19 20:30:13 (250 мс) Ордер SBER отправлен: 15.02.19 20:30:13 Ордер SBER исполнился: 15.02.19 20:30:14 (561 мс) Ордер SRH9 отправлен: 15.02.19 20:30:14 Ордер SRH9 исполнился: 15.02.19 20:30:14 (125 мс) Ордер SBER отправлен: 15.02.19 20:30:14 Ордер SBER исполнился: 15.02.19 20:30:15 (749 мс) Ордер SRH9 отправлен: 15.02.19 20:30:16 Ордер SRH9 исполнился: 15.02.19 20:30:16 (124 мс) Ордер SBER отправлен: 15.02.19 20:30:16 Ордер SBER исполнился: 15.02.19 20:30:17 (999 мс) Ордер SRH9 отправлен: 15.02.19 20:31:23 Ордер SRH9 исполнился: 15.02.19 20:31:23 (125 мс) Ордер SBER отправлен: 15.02.19 20:31:23 Ордер SBER исполнился: 15.02.19 20:31:24 (1560 мс) Ордер SRH9 отправлен: 15.02.19 20:31:27 Ордер SRH9 исполнился: 15.02.19 20:31:27 (109 мс) Ордер SBER отправлен: 15.02.19 20:31:27 Ордер SBER исполнился: 15.02.19 20:31:28 (1014 мс) Ордер SRH9 отправлен: 15.02.19 20:31:29 Ордер SRH9 исполнился: 15.02.19 20:31:29 (187 мс) Ордер SBER отправлен: 15.02.19 20:31:29 Ордер SBER исполнился: 15.02.19 20:31:30 (1202 мс) Ордер SRH9 отправлен: 15.02.19 20:31:31 Ордер SRH9 исполнился: 15.02.19 20:31:31 (202 мс) Ордер SBER отправлен: 15.02.19 20:31:31 Ордер SBER исполнился: 15.02.19 20:31:32 (796 мс) Ордер SRH9 отправлен: 15.02.19 20:31:32 Ордер SRH9 исполнился: 15.02.19 20:31:33 (109 мс) Ордер SBER отправлен: 15.02.19 20:31:33 Ордер SBER исполнился: 15.02.19 20:31:34 (1435 мс) Ордер SRH9 отправлен: 15.02.19 20:31:36 Ордер SRH9 исполнился: 15.02.19 20:31:36 (203 мс) Ордер SBER отправлен: 15.02.19 20:31:36 Ордер SBER исполнился: 15.02.19 20:31:37 (437 мс) Ордер SRH9 отправлен: 15.02.19 20:31:41 Ордер SRH9 исполнился: 15.02.19 20:31:41 (125 мс) Ордер SBER отправлен: 15.02.19 20:31:41 Ордер SBER исполнился: 15.02.19 20:31:42 (873 мс) Ордер SRH9 отправлен: 15.02.19 20:31:42 Ордер SRH9 исполнился: 15.02.19 20:31:42 (109 мс) Ордер SBER отправлен: 15.02.19 20:31:42 Ордер SBER исполнился: 15.02.19 20:31:43 (687 мс) Ордер SRH9 отправлен: 15.02.19 20:31:51 Ордер SRH9 исполнился: 15.02.19 20:31:51 (140 мс) Ордер SBER отправлен: 15.02.19 20:31:51 Ордер SBER исполнился: 15.02.19 20:31:51 (312 мс) Ордер SRH9 отправлен: 15.02.19 20:31:56 Ордер SRH9 исполнился: 15.02.19 20:31:56 (109 мс) Ордер SBER отправлен: 15.02.19 20:31:56 Ордер SBER исполнился: 15.02.19 20:31:57 (1186 мс) prostotrader 2019.02.20 19:55 #123 Sergey Chalyshev:刹车是否碍事? 该视频是一个调整过的版本。 我对算法进行了一些优化。 为了使DDE和来自DLL的collabs同步,我使用了关键部分。 "回复 "订单的下达是在关键部分内进行的( 数据处理函数被称为 并发送订单OnTrade()),现在这个函数由PosMessage调用,这大大减少了延迟。 if(string(SecCode) = Child.Expert.ExpData.FutData.SecCode) then //future begin case nStatus of 1: {active}; 2: begin if(StartQty = nBalance) then //Canceled begin Child.Expert.FOrder:= 0; Child.Expert.FTransID:= 0; Child.Expert.FTransBusy:= false; end else begin case nIsSell of 0: Child.Expert.FFutVol:= Child.Expert.FFutVol + (StartQty - nBalance); else Child.Expert.FFutVol:= Child.Expert.FFutVol - (StartQty - nBalance); end; Child.Expert.FVolume:= StartQty - nBalance; Child.Expert.FaSell:= nIsSell; Child.Expert.FOrder:= 0; PostMessage(Child.Expert.Handle, WM_ON_TRADE, NativeUint(Child.Expert.Handle), 0); // Child.Expert.OnTrade(); //TODO DEBUG end; end; else begin //Future order Done case nIsSell of 0: Child.Expert.FFutVol:= Child.Expert.FFutVol + (StartQty - nBalance); else Child.Expert.FFutVol:= Child.Expert.FFutVol - (StartQty - nBalance); end; Child.Expert.FVolume:= StartQty - nBalance; Child.Expert.FaSell:= nIsSell; Child.Expert.FOrder:= 0; PostMessage(Child.Expert.Handle, WM_ON_TRADE, NativeUint(Child.Expert.Handle), 0); // Child.Expert.OnTrade(); //TODO DEBUG end; end; break; end else if(string(SecCode) = Child.Expert.ExpData.SpotData.SecCode) then //spot 但在速度上与MT5相差甚远:( prostotrader 2019.03.14 17:53 #124 prostotrader:但在速度方面与MT5相差甚远:(我还是把快速链接 "拧 "到了MT5上,但我看不到快速链接的输出和通过DDE的快速链接的输出有什么不同。 如果有人对它是如何完成的感兴趣,我把代码粘贴出来。 专家顾问 它的作用是什么? 收集所有当前的ciswalls(fetches),在枚举(Variables.mqh)中指定。 并将它们添加到数组结构中。 为这些符号寻找一个匹配的SPOT,同时将它们添加到 阵列结构。 为所有发现的期货添加堆栈。 当一个堆栈被触发时,它获取期货和现货的aski和比特,并将其发送到DLL(MT5Client.dll)。 //+------------------------------------------------------------------+ //| Variables.mqh | //| Copyright 2019 prostotrader | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2019 prostotrader" #property link "https://www.mql5.com" //--- enum TIKERS { AFLT, ALRS, CHMF, FEES, GAZR, GMKR, HYDR, LKOH, MAGN, MGNT, MOEX, MTSI, NLMK, NOTK, PLZL, ROSN, RTKM, SBPR, SBRF, SNGP, SNGR, TATN, TRNF, VTBR }; // struct QFS_DATA { string base_tiker; string tiker; double fut_sell_price; double fut_buy_price; double spot_sell_price; double spot_buy_price; bool book_add; }; const TIKERS enum_tikers[] = {AFLT, ALRS, CHMF, FEES, GAZR, GMKR, HYDR, LKOH, MAGN, MGNT, MOEX, MTSI, NLMK, NOTK, PLZL, ROSN, RTKM, SBPR, SBRF, SNGP, SNGR, TATN, TRNF, VTBR}; QFS_DATA qfs_data[]; //+------------------------------------------------------------------+ //| Functions.mqh | //| Copyright 2019 prostotrader | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2019 prostotrader" #property link "https://www.mql5.com" //--- #include "Variables.mqh" //+------------------------------------------------------------------+ //| Check terminal function | //+------------------------------------------------------------------+ bool CheckTerminal() { return(true); } //+------------------------------------------------------------------+ //| Get Expiration function | //+------------------------------------------------------------------+ ulong GetExpiration(const string a_symb) { return(ulong(SymbolInfoInteger(a_symb, SYMBOL_EXPIRATION_TIME))); } //+------------------------------------------------------------------+ //| Get SPOT function | //+------------------------------------------------------------------+ string GetSpot(const string a_name) { if(a_name == "GAZR") {return("GAZP");} else if(a_name == "SBRF") {return("SBER");} else if(a_name == "SBPR") {return("SBERP");} else if(a_name == "TRNF") {return("TRNFP");} else if(a_name == "NOTK") {return("NVTK");} else if(a_name == "MTSI") {return("MTSS");} else if(a_name == "GMKR") {return("GMKN");} else if(a_name == "SNGR") {return("SNGS");} else if(a_name == "SNGP") {return("SNGSP");} else return(a_name); } //+------------------------------------------------------------------+ //| Set Tickers function | //+------------------------------------------------------------------+ bool SetTickers() { int s_total = SymbolsTotal(false); if(s_total > 0) { int s_cnt = 0; ulong fut_exp; string fut_name = ""; string t_name = ""; string spot_name; ulong cur_time = ulong(TimeTradeServer()); for(int i = 0; i < s_total;i++) { fut_name = SymbolName(i, false); for(int j = 0; j < ArraySize(enum_tikers);j++) { t_name = EnumToString(enum_tikers[j]); if(t_name != "") { fut_exp = GetExpiration(fut_name); if(fut_exp > ulong(cur_time)) { if(StringFind(fut_name, t_name) > -1) { spot_name = GetSpot(t_name); if(spot_name != "") { s_cnt++; ArrayResize(qfs_data, s_cnt); qfs_data[s_cnt - 1].tiker = fut_name; qfs_data[s_cnt - 1].base_tiker = spot_name; if(SymbolSelect(fut_name, true) != true) return(false); if(SymbolSelect(spot_name, true) != true) return(false); break; } } } } } } if(s_cnt > 0) return(true); } return(false); } //+------------------------------------------------------------------+ //| Quik_out.mq5 | //| Copyright 2019 prostotrader | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2019 prostotrader" #property link "https://www.mql5.com" #property version "1.00" //--- #include "Quik\Functions.mqh" // int a_size = 0; //+------------------------------------------------------------------+ //| DLL imports | //+------------------------------------------------------------------+ #import "MT5Client.dll" void SendData(QFS_DATA &a_data); #import //--- //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { if(CheckTerminal() == false) return(INIT_FAILED); if(SetTickers() == true) { a_size = ArraySize(qfs_data); if(a_size > 0) { for(int i = 0; i < a_size;i++) { qfs_data[i].book_add = MarketBookAdd(qfs_data[i].tiker); } } } else return(INIT_FAILED); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { if(a_size > 0) { for(int i = 0; i < a_size;i++) { if(qfs_data[i].book_add == true) MarketBookRelease(qfs_data[i].tiker); } } } //+------------------------------------------------------------------+ //| BookEvent function | //+------------------------------------------------------------------+ void OnBookEvent(const string &symbol) { for(int i = 0; i< a_size;i++) { if(symbol == qfs_data[i].tiker) { qfs_data[i].fut_sell_price = SymbolInfoDouble(qfs_data[i].tiker, SYMBOL_ASK); qfs_data[i].fut_buy_price = SymbolInfoDouble(qfs_data[i].tiker, SYMBOL_BID); qfs_data[i].spot_sell_price = SymbolInfoDouble(qfs_data[i].base_tiker, SYMBOL_ASK); qfs_data[i].spot_buy_price = SymbolInfoDouble(qfs_data[i].base_tiker, SYMBOL_BID); SendData(qfs_data[i]); break; } } } //+------------------------------------------------------------------+ MT5Client.dll只是根据设定的领口发送数据。 unit MT5Types; interface type PData = ^TData; TData = packed record base_tiker: string; tiker: string; fut_sell_price: double; fut_buy_price: double; spot_sell_price: double; spot_buy_price: double; book_add: boolean; end; TCallBack = function(Data: PData): boolean; var OutData: TCallBack; implementation end. library MT5Client; uses System.Sharemem, WinApi.Windows, MT5Types in 'MT5Types.pas'; //--- Exports --- procedure SetCallBack(CallBack: TCallBack); stdcall; begin OutData:= CallBack; end; procedure SendData(aData: PData); stdcall; begin if(Assigned(OutData)) then OutData(aData); end; {$R *.res} exports SetCallBack, SendData; begin // end. Aleksey Vyazmikin 2019.03.14 19:03 #125 prostotrader:但我还是把快速拉动器 "栓 "在MT5上,但与快速拉动器通过DDE的输出相比,我看不到任何改进。 如果有人对它是如何完成的感兴趣,我把代码粘贴出来。 专家顾问 它的作用是什么? 这种设计允许你从Quickquote接收数据到MT5,并从MT5向Quickquote发出仓位管理的指令? 有兴趣工作的选项只是... prostotrader 2019.03.14 20:01 #126 Aleksey Vyazmikin:这种设计是否允许你从Quickquick接收数据到MT5,并从MT5向Quickquick发出仓位控制指令? 有兴趣工作的选项只是...不,数据来自MT5,并被发送到你的程序(终端),该程序 Trans2quik.dll将订单 发送到Kwik(MT5没有选项)。 Aleksey Vyazmikin 2019.03.14 20:04 #127 prostotrader:不,数据来自MT5,并传输到其程序(终端),该程序 通过trans2quik.dll向Kwik发送订单(MT5没有选择)。遗憾的是。我以为可以控制Kvik的命令,它里面有选项。 prostotrader 2019.03.14 20:19 #128 Aleksey Vyazmikin:遗憾的是。我以为可以控制Quick的订单,其中有选项。你知道Delphi吗? Aleksey Vyazmikin 2019.03.14 20:34 #129 prostotrader:你知道Delphi吗?唉,没有 :( prostotrader 2019.03.14 20:48 #130 Aleksey Vyazmikin:唉,没有 :(然后等待我进入选项... 现在我只用手交易(等待消息)。 1...6789101112131415161718 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
没有LUA的完整C++代码呢?
所以在上面的电影中,没有LUA,只有不是C++而是Pascal(Delphi XE4)。
所以在上面的电影中,没有LUA,只有不是C++而是Pascal(Delphi XE4)。
刹车不干涉吗?
关于交易、自动交易系统和交易策略测试的论坛
MT5和trans2quik.dll
prostotrader, 2019.02.15 18:42
关于通过快速交易,你可以像做恶梦一样忘记它。
刹车是否碍事?
该视频是一个调整过的版本。
我对算法进行了一些优化。
为了使DDE和来自DLL的collabs同步,我使用了关键部分。
"回复 "订单的下达是在关键部分内进行的( 数据处理函数被称为
并发送订单OnTrade()),现在这个函数由PosMessage调用,这大大减少了延迟。
但在速度上与MT5相差甚远:(
但在速度方面与MT5相差甚远:(
我还是把快速链接 "拧 "到了MT5上,但我看不到快速链接的输出和通过DDE的快速链接的输出有什么不同。
如果有人对它是如何完成的感兴趣,我把代码粘贴出来。
专家顾问
它的作用是什么?
收集所有当前的ciswalls(fetches),在枚举(Variables.mqh)中指定。
并将它们添加到数组结构中。
为这些符号寻找一个匹配的SPOT,同时将它们添加到
阵列结构。
为所有发现的期货添加堆栈。
当一个堆栈被触发时,它获取期货和现货的aski和比特,并将其发送到DLL(MT5Client.dll)。
MT5Client.dll只是根据设定的领口发送数据。
但我还是把快速拉动器 "栓 "在MT5上,但与快速拉动器通过DDE的输出相比,我看不到任何改进。
如果有人对它是如何完成的感兴趣,我把代码粘贴出来。
专家顾问
它的作用是什么?
这种设计允许你从Quickquote接收数据到MT5,并从MT5向Quickquote发出仓位管理的指令?
有兴趣工作的选项只是...这种设计是否允许你从Quickquick接收数据到MT5,并从MT5向Quickquick发出仓位控制指令?
有兴趣工作的选项只是...不,数据来自MT5,并被发送到你的程序(终端),该程序
Trans2quik.dll将订单 发送到Kwik(MT5没有选项)。
不,数据来自MT5,并传输到其程序(终端),该程序
通过trans2quik.dll向Kwik发送订单(MT5没有选择)。
遗憾的是。我以为可以控制Kvik的命令,它里面有选项。
遗憾的是。我以为可以控制Quick的订单,其中有选项。
你知道Delphi吗?
你知道Delphi吗?
唉,没有 :(
唉,没有 :(
然后等待我进入选项...
现在我只用手交易(等待消息)。