TWS auto-export Executions-file parser.afl
上传用户:shiqiang
上传日期:2009-06-12
资源大小:1289k
文件大小:5k
源码类别:

金融证券系统

开发平台:

Others

  1. //------------------------------------------------------------------------------
  2. //
  3. //  Formula Name:    TWS auto-export Executions-file parser
  4. //  Author/Uploader: Herman van den Bergen 
  5. //  E-mail:          
  6. //  Date/Time Added: 2005-04-10 18:00:26
  7. //  Origin:          
  8. //  Keywords:        TWS trade-executions converter and trade-plotter
  9. //  Level:           advanced
  10. //  Flags:           function
  11. //  Formula URL:     http://www.amibroker.com/library/formula.php?id=457
  12. //  Details URL:     http://www.amibroker.com/library/detail.php?id=457
  13. //
  14. //------------------------------------------------------------------------------
  15. //
  16. //  Intended for real-time traders using the Interactive Brokers TWS. This
  17. //  function converts the auto-exported trade executions file from the TWS to
  18. //  csv format, creates an AmiBroker compatible format for further processing,
  19. //  and plots real trades at execution prices on your chart. This is
  20. //  experimental code provided for experienced afl programmers only.
  21. //
  22. //------------------------------------------------------------------------------
  23. // Important: This is experimental, as-is, code for you to play with and improve. 
  24. // Converts and Plots trades listed in the auto-exported TWS Trade-Executions file.
  25. // This code is intended for Real-Time trading, I use it in the 3-min timeframe.
  26. // Configure your TWS to auto-export the trade-executions list (TWSTrades.txt) each Minute.
  27. // Change the destination path/name for your csv output file for your setup.
  28. // One array is returned by the function: negative prices are Shorts, pos prices are Long.
  29. // Note that you must have real executed trades exported to plot them
  30. // The program doesn't concatenate trading days yet but creates timestamped csv files.
  31. // The trade list is copied to StaticVarSetText("TWSTrades") for further processing or 
  32. // display in the interpretation window. Coded by Herman van den Bergen - 10APR2005.
  33. function PlotTWSExecutions()
  34. {
  35. InputPath = "C:\Jts\TWSTrades.txt";
  36. OutPutFilename = "TWSTrades"+NumToStr(Now(3),1.0,False)+".csv";
  37. OutputPath = "C:\Program Files\AmiBroker\TWSTrades\"+OutPutFilename;
  38. fdelete( OutPutPath );
  39. fh1 = fopen( InputPath, "r"); 
  40. fh2 = fopen( OutputPath, "a");
  41. if( fh1 AND fh2 ) 
  42. TradeList= ""; TradeNum = 0;
  43.    while( ! feof( fh1 ) ) 
  44.     { 
  45.        Line1 = fgets( fh1 );
  46. Line2 = "";
  47. Len = StrLen(Line1);
  48. for(p=0; p<=Len; p++)
  49. {
  50. Char = StrMid(Line1,p,1);
  51. if( Char == ";" ) Char = ",";
  52. Line2 = Line2 + Char;
  53. if( Line2 != "" )
  54. {
  55. TradeNum++;
  56. fputs( Line2, fh2);
  57. Ticker  = StrExtract(Line2,0);
  58. Action  = StrExtract(Line2,1); if( Action=="SLD" ) ActionNum = -1; else if(Action=="BOT") ActionNum=1; 
  59. Shares = StrExtract(Line2,2); SharesS = StrToNum(Shares);
  60. Price = StrExtract(Line2,3); PriceNum = StrToNum(Price);
  61. TimeStr = StrExtract(Line2,4);
  62. DateStr = StrExtract(Line2,5);
  63. ABDateNum = 10000*(StrToNum(StrLeft(DateStr,4))-1900)+
  64. 100*StrToNum(StrMid(DateStr,4,2))+
  65.  StrToNum(StrRight(DateStr,2)); 
  66. ABDateNumStr = NumToStr(ABDateNum ,1.0,False);
  67. TradeNumStr = NumToStr(TradeNum,1.0,False);
  68. ABTime = "";TimeOffSet = 040000; // Adjust to your location
  69. for(t=0; t<=StrLen(TimeStr); t++)
  70. {
  71. Char = StrMid(TimeStr,t,1);
  72. if( Char == ":" ) Char="";
  73. ABTime = ABTime + Char;
  74. }
  75. ABTimeNum = StrToNum(ABTime)-TimeOffSet;
  76. VarSet("TradeTime"+TradeNum, ABTimeNum);
  77. VarSet("TradePrice"+TradeNum, ActionNum * PriceNum);
  78. VarSet("TradeDate"+TradeNum, ABDateNum);
  79. ABTimeStr = NumToStr(ABTimeNum,1.0,False);
  80. DateStr = StrExtract(Line2,5);
  81. Trade = TradeNumStr+" ,"+ABTimeStr+", "+ABDateNumStr+" "+Action + ", "+ SharesS+", "+Price +"n";
  82. TradeList= TradeList + Ticker + ", "+ Trade;
  83. }
  84.   }
  85. StaticVarSetText("TWSTrades",TradeList);
  86. fclose(fh1);
  87. fclose(fh2);
  88. else TradeList = "TradeList could not be converted";
  89. FirstVisibleBar = Status( "FirstVisibleBar");
  90. Lastvisiblebar = Status("LastVisibleBar");
  91. TN = TimeNum();
  92. PriceArray = Null;
  93. TradeNum = 1;
  94. TTS = VarGet("TradeTime"+TradeNum);
  95. DN=DateNum();
  96. for( b = Firstvisiblebar; b < Lastvisiblebar; b++)
  97. {
  98. TDN = VarGet("TradeDate"+TradeNum);
  99. if( TDN == DN[b] )
  100. {
  101. TTSs = NumToStr(TTS,1.0,False);
  102. while( TTS > TN[b-1] AND TTS <= TN[b] )
  103. {
  104. PriceNum = VarGet("TradePrice"+TradeNum);
  105. if( PriceNum <0 ) ActionNum = -1; else ActionNum = 1;
  106. PriceArray[b] = PriceNum;
  107. TTS = VarGet("TradeTime"+(++TradeNum));
  108. }
  109. }
  110. }
  111. return PriceArray;
  112. }
  113. TWSTradePrices= PlotTWSExecutions();
  114. Tradecolor = IIf(TWSTradePrices<0,4,5);
  115. Plot(C,"",1,128);
  116. PlotShapes(IIf(TWSTradePrices,shapeSmallCircle,shapeNone),TradeColor,0,abs(TWSTradePrices),0);
  117. TWSTradeList = StaticVarGetText("TWSTrades");