Guest User

Untitled

a guest
Jun 20th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.49 KB | None | 0 0
  1. %% Initialize
  2. clear all;
  3. startDate = datenum('2005-08-25');
  4. endDate = datenum('2010-10-20');
  5. dateRange = busdays(startDate, endDate);
  6.  
  7. %% Load SPY data
  8. csvFile = fopen('data/SPY.csv', 'r');
  9. csvFields = textscan(csvFile, '%s %f %f %f %f %f %f',-1,'delimiter',',','HeaderLines',1);
  10. fclose(csvFile);
  11. ftsSPY = fints(datenum(csvFields{1},'yyyy-mm-dd'), [csvFields{2} csvFields{3}, csvFields{4} csvFields{5} csvFields{6} csvFields{7}], {'Open','High','Low','Close','Volume','Adj'});
  12. ftsSPY = ftsSPY(ismember(ftsSPY.dates, dateRange));
  13.  
  14. %% Load POMO data
  15. csvFile = fopen('data/pomo_20050825_20101025.csv', 'r');
  16. pomoData = textscan(csvFile, '%s %s %s %s %s %s %s %f %f %f', -1, 'delimiter', ',', 'HeaderLines', 1);
  17. fclose(csvFile);
  18. directionVec = strcmpi(pomoData{2}, 'P');
  19. directionVec(directionVec==0) = -1;
  20. ftsPOMO = fints(datenum(pomoData{1}), [pomoData{9}, pomoData{10}, directionVec, pomoData{8}], {'Accepted','Submitted','Direction','NumIssues'});
  21. ftsPOMO = ftsPOMO(ismember(ftsPOMO.dates, dateRange));
  22. ftsPOMO = todaily(ftsPOMO);
  23.  
  24. %% Double-check dates
  25. if length(ftsSPY) ~= length(ftsPOMO)
  26. error('Date vectors do not match in length between SPY and POMO');
  27. else
  28. if sum(ftsSPY.dates ~= ftsPOMO.dates) > 0
  29. error('Date vectors do not match in values between SPY and POMO');
  30. end
  31. end
  32.  
  33. %% Run the regression on submitted/accepted ratio
  34. % Close - open intraday return
  35. spyIntraDayReturn = log(fts2mat(ftsSPY.Close)) - log(fts2mat(ftsSPY.Open));
  36.  
  37. % Log total dollars traded, as approximated by open-close midpoint
  38. spyDolVol = log(0.5 * fts2mat(ftsSPY.Volume) .* (fts2mat(ftsSPY.Open) + fts2mat(ftsSPY.Close)));
  39.  
  40. % Submit/accept ratio
  41. pomoSubmitAcceptRatio = fts2mat(ftsPOMO.Direction) .* fts2mat(ftsPOMO.Accepted) ./ fts2mat(ftsPOMO.Submitted);
  42.  
  43. pomoTopThird = find(pomoSubmitAcceptRatio > prctile(pomoSubmitAcceptRatio, 66));
  44. pomoBottomThird = find(pomoSubmitAcceptRatio < prctile(pomoSubmitAcceptRatio, 33));
  45. pomoMiddleThird = find((pomoSubmitAcceptRatio >= prctile(pomoSubmitAcceptRatio, 33)) .* (pomoSubmitAcceptRatio <= prctile(pomoSubmitAcceptRatio, 66)));
  46. noPomo = find(isnan(pomoSubmitAcceptRatio));
  47.  
  48. figure;
  49. hold all;
  50. disp('# Submit/Accept');
  51. scatter(pomoSubmitAcceptRatio(pomoBottomThird), spyIntraDayReturn(pomoBottomThird), 'or');
  52. fprintf('Bottom: %f\n', sum(spyIntraDayReturn(pomoBottomThird)));
  53. scatter(pomoSubmitAcceptRatio(pomoMiddleThird), spyIntraDayReturn(pomoMiddleThird), 'xb');
  54. fprintf('Middle: %f\n', sum(spyIntraDayReturn(pomoMiddleThird)));
  55. scatter(pomoSubmitAcceptRatio(pomoTopThird), spyIntraDayReturn(pomoTopThird), '.g');
  56. fprintf('Top: %f\n', sum(spyIntraDayReturn(pomoTopThird)));
  57. legend({'Bottom Third, A/S', 'Middle Third, A/S', 'Top Third, A/S'});
  58. title('POMO and Return');
  59. ylabel('Return');
  60. xlabel('A/S');
  61. [retB, retD, retS] = glmfit(pomoSubmitAcceptRatio, spyIntraDayReturn);
  62. [absretB, absretD, absretS] = glmfit(pomoSubmitAcceptRatio, abs(spyIntraDayReturn));
  63.  
  64.  
  65. figure;
  66. hold all;
  67. disp('# Dollar Volume');
  68. scatter(pomoSubmitAcceptRatio(pomoBottomThird), spyDolVol(pomoBottomThird), 'or');
  69. fprintf('Bottom: %f\n', mean(spyDolVol(pomoBottomThird)));
  70. scatter(pomoSubmitAcceptRatio(pomoMiddleThird), spyDolVol(pomoMiddleThird), 'xb');
  71. fprintf('Middle: %f\n', mean(spyDolVol(pomoMiddleThird)));
  72. scatter(pomoSubmitAcceptRatio(pomoTopThird), spyDolVol(pomoTopThird), '.g');
  73. fprintf('Top: %f\n', mean(spyDolVol(pomoTopThird)));
  74. legend({'Bottom Third, A/S', 'Middle Third, A/S', 'Top Third, A/S'});
  75. title('POMO and Dollar Volume');
  76. ylabel('Dollar Volume');
  77. xlabel('A/S');
  78. [dvB, dvD, dvS] = glmfit(pomoSubmitAcceptRatio, spyDolVol);
Add Comment
Please, Sign In to add comment