MT4测试多个货币对--实现资产组合的方法!

Discussion in 'MetaTrader' started by bear, Oct 25, 2008.

  1. MT4是否能够测试多个货币对?
    是否有现成的插件?
    如果要实现上面的方法:
    1. 增加一个DLL提供给多个MT TESTER终端通讯。
    2. 使用reportmanager.exe 组合测试报告。

    请大家去讨论一下实现的可行性?
     
  2. 另一个的解决方法是采用MYSQL的方法

    大家没有反应。只好自己回一下。
    "1. 增加一个DLL提供给多个MT TESTER终端通讯。"
    如果测试EURUSD和GBPUSD的资产组合,在EURUSD TESTER需要获得GBPUSD TESTER的数据(同理,在GBPUSD TESTER需要获得EURUSDTESTER的数据)。利用DLLSERVER来实现他们间的通讯有一定的困难。
    -----另一个的解决方法是采用MYSQL的方法。这样可以预先把数据导入mysql,然后通过SQL查询访问数据。请参考http://www.forexforums.org/mt4-tools-utilities/249-metatrader-data-mysql.html
     
  3. 另一个的解决方法是采用SQLServer的方法

    -----另一个的解决方法是采用SQLServer的方法。
    Integrating MetaTrader 4 Client Terminal with MS SQL Server
    http://articles.mql4.com/640
     
  4. 没搞过,应该不靠谱。
     
  5. 实现流程

    系统框图如上。下面的例子是在EURUSD和GBPUSD随机指标同时小于25,EURUSD做多,在EURUSD和GBPUSD随机指标同时大于75,EURUSD做空。用定义#define Portfolio true
    来做模拟测试。当#define Portfolio false时可以用做实际交易。另外通过调用DLL 实现GBPUSD 的iStochastic (Portfolio_iStochastic)函数的实现(因为在MT4 Tester1 只做EURUSD的测试,没有GBPUSD的数据,所以在MT4 Tester1上是没有办法获得GBPUSD 的iStochastic的数值)。这时候可以同时启动安装在另外一个地方的MT4 Tester2,让其测试GBPUSD的数据。从程序代码可以看出,只有启动MultiSybolTester应用程序后,MT4 Tester1和MT4 Tester2 才会开始工作。MT4 Tester2从SQLServerDLL获得MT4 Tester1 通过Portfolio_iStochastic传给SQLSERVERDLL的参数,算出GBPUSD iStochastic函数数值.
    有点复杂,不知道大家是否有更好的方法。至于为什么要用SQLSEVER, 先卖个关子。





    各个应用程序大概流程如下:
    1)MT4 Tester1(EURUSD):
    #define Portfolio true
    #import "PortfolioMSSQL.dll"
    string Stoc()
    {
    string myOrderType="No direction";
    double EURUSDStocMainCurr=iStochastic(“EURUSD”,StocMTF,K,D,Slowing,Stoch_mode,Stoch_price,MODE_MAIN,0);
    if(Portfolio==false)
    double GBPUSDStocMainCurr=iStochastic(“GBPUSD”,StocMTF,K,D,Slowing,Stoch_mode,Stoch_price,MODE_MAIN,0);
    else
    double GBPUSDStocMainCurr=Portfolio_iStochastic(“GBPUSD”,StocMTF,K,D,Slowing,Stoch_mode,Stoch_price,MODE_MAIN,0);

    if(EURUSDStocMainCurr<25&&GBPUSDStocMainCurr<25)
    {myOrderType="Buy Only";}
    if(EURUSDStocMainCurr>75&&GBPUSDStocMainCurr>75)
    {myOrderType="Sell Only";}

    return(myOrderType);
    }

    int start()
    {
    if(Portfolio ==true)
    {
    if(StopSyn()==true)return(1);
    }
    string myOrderType=Stoc();
    if(myOrderType=="Buy Only")
    OrderSend(Symbol(),OP_SELL,mylotsi,SellPrice,slippage,sl,tp,"Sell",Magic,0,Red);
    if(myOrderType=="Sell Only")
    OrderSend(Symbol(),OP_SELL,mylotsi,SellPrice,slippage,sl,tp,"Buy",Magic,0,Red);
    }

    2)
    PortfolioMSSQL.dll:

    Portfolio_iStochastic()
    {
    SEND 参数和函数名--》SOLSERVER, 记录当前时间ct
    STOP MT4 Tester1 AND MT4 Tester2 FOR compute

    }
    GetPortfolio_iStochastic()
    {
    GET 参数和函数名<<---SOLSERVER
    }
    static bStopSyn=false;
    bool StopSyn()
    {
    return bStopSyn;
    }
    void SetStopSyn(bool ft)
    {
    bStopSyn=true;
    }
    3)MT4 Tester2(GBPUSD):


    #import "PortfolioMSSQL.dll"
    int start()
    {

    if(StopSyn()==true)return (1);
    GetPortfolio_iStochastic(...);
    GBPUSDStocMainCurr=Portfolio_iStochastic(“GBPUSD”,StocMTF,K,D,Slowing,Stoch_mode,Stoch_price,MODE_MAIN,0);
    }

    4)MultiSybolTester:
    void main()
    {
    SetStopSyn(false);// 等MT4 Tester1和MT4 Tester2先启动,处于等待状态,这时候set false才让他们开始工作。
    while(true)
    {
    这里可以设定事件,控制 等MT4 Tester1和MT4 Tester2保持同步状态,老让MT4 Tester1调用MT4 Tester2的数据。
    }
    getchar();//(用GUI界面控制,跟MT4 Tester1和MT4 Tester2沟通更好。)
    }
     
  6. 不知道怎么上传图片?
     
  7. 附件中加图片(jpg)就可以了,恩,这方法看起来是可以。不错!不过,每做一次工作量不小啊。

    等MT5出来吧,估计半年内就好了。
     
  8. 不要用SQL server 做两程序的通信。请用文件内存映射的方法,可以共享两程序的数据。想要什么就有什么数据。