Advertisement
Maurizio-Ciullo

DAY OF WEEK BIAS ANALYZER 1D [INDICATORE] QTA Mastermind

May 11th, 2025 (edited)
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.                         // DAY OF WEEK BIAS ANALYZER 1D [INDICATORE] QTA Mastermind
  2. // Vedi Video 1 Cartella Mastermind QTA
  3.  
  4. // Impostare il timeframe daily a 1440 minuti !!!
  5. // Questo indicatore calcola la somma positiva o negativa di tutti i giorni della settimana dal passato fini ad oggi, ma potremmo anche avere anni molto forti come variazione e anni molto deboli
  6. // quindi dopo averlo lanciato per tutto lo storico bisogna spulciare il dataframe di anno in anno salvandosi i risultati per capire se il mercato è ancora coerente con il bias in atto !!!.
  7.  
  8. array: countPerDay[6](0),
  9.        deltaSumPerDay[6](0),
  10.        avgPerDay[6](0),
  11.        cumPerDay[6](0);
  12.  
  13. vars: dowIdx(0), ix(0);
  14.  
  15. // Ogni volta che cambia la data aggiorno conteggi e delta
  16. if Date <> Date[1] then begin
  17.     // DayOfWeek: 1=Sun ? 7=Sat; voglio Mon=0 ? Sun=6
  18.     dowIdx = DayOfWeek(Date) - 1;
  19.     if dowIdx < 0 then dowIdx = 6;  // domenica ? 0-1 = -1 ? 6
  20.  
  21.     countPerDay[dowIdx]    = countPerDay[dowIdx] + 1;
  22.     deltaSumPerDay[dowIdx] = deltaSumPerDay[dowIdx] + (Close - Close[1]);
  23.  
  24. end;
  25.  
  26. // Solo una volta, sull?ultima barra, costruisco il report HTML
  27. if LastBarOnChart then begin
  28.     //vars: bestIx(0), worstIx(0), bestVal(-1e12), worstVal(1e12), valPts(0);  !!! MULTICHARTS
  29.     vars: bestIx(0), worstIx(0), bestVal(-1000000000000), worstVal(1000000000000), valPts(0);// !!! TRADESTATION
  30.     vars: tableHTML(""), dowName("");
  31.  
  32.     // Calcolo medie e cumulato
  33.     for ix = 0 to 6 begin
  34.         if countPerDay[ix] > 0 then
  35.             avgPerDay[ix] = deltaSumPerDay[ix] / countPerDay[ix]
  36.         else
  37.             avgPerDay[ix] = 0;
  38.  
  39.         if ix > 0 then
  40.             cumPerDay[ix] = cumPerDay[ix-1] + avgPerDay[ix]
  41.         else
  42.             cumPerDay[ix] = avgPerDay[ix];
  43.     end;
  44.  
  45.     // Trovo giorno migliore e peggiore in $
  46.     for ix = 0 to 6 begin
  47.         if countPerDay[ix] > 0 then begin
  48.             valPts = avgPerDay[ix] * BigPointValue;
  49.             if valPts > bestVal then begin bestVal = valPts; bestIx = ix; end;
  50.             if valPts < worstVal then begin worstVal = valPts; worstIx = ix; end;
  51.         end;
  52.     end;
  53.  
  54.     // Inizio HTML
  55.     tableHTML =
  56.       "<style>table{font-size:11px;border-collapse:collapse;}"
  57.       + "th{background:#eee;}td,th{border:1px solid #999;"
  58.       + "padding:4px 6px;text-align:center;}"
  59.       + ".green{background:#e1f5e1;font-weight:bold;}"
  60.       + ".red{background:#fce4e4;font-weight:bold;}</style>"
  61.       + "<table><tr><th>Giorno</th><th>Media Punti</th><th>Media $</th></tr>";
  62.  
  63.     // Riga per ogni giorno
  64.     for ix = 0 to 6 begin
  65.         if countPerDay[ix] > 0 then begin
  66.             valPts = avgPerDay[ix] * BigPointValue;
  67.  
  68.             // colore della riga
  69.             if ix = bestIx then
  70.                 tableHTML = tableHTML + "<tr class='green'>"
  71.             else if ix = worstIx then
  72.                 tableHTML = tableHTML + "<tr class='red'>"
  73.             else if avgPerDay[ix] > 0 then
  74.                 tableHTML = tableHTML + "<tr style='background:#f0fff0;'>"
  75.             else if avgPerDay[ix] < 0 then
  76.                 tableHTML = tableHTML + "<tr style='background:#fff0f0;'>"
  77.             else
  78.                 tableHTML = tableHTML + "<tr style='background:#f8f8f8;'>";
  79.  
  80.             // nome del giorno
  81.             switch ix begin
  82.                 case 0: dowName = "Lunedi";
  83.                 case 1: dowName = "Martedi";
  84.                 case 2: dowName = "Mercoledi";
  85.                 case 3: dowName = "Giovedi";
  86.                 case 4: dowName = "Venerdi";
  87.                 case 5: dowName = "Sabato";
  88.                 case 6: dowName = "Domenica";
  89.             end;
  90.  
  91.             // celle
  92.             tableHTML = tableHTML
  93.               + "<td>" + dowName + "</td>"
  94.               + "<td>" + NumToStr(avgPerDay[ix], 3) + "</td>"
  95.               + "<td>" + NumToStr(valPts, 2) + "</td></tr>";
  96.         end;
  97.     end;
  98.  
  99.     tableHTML = tableHTML + "</table>";
  100.     CommentaryCL(tableHTML);
  101. end;
  102.  
  103. ////////////////////////////////////    ////////////////////////////////////    ////////////////////////////////////    ////////////////////////////////////
  104.  
  105. // Aggiunto Personalmente il Print Debug !!!
  106. if LastBarOnChart then begin
  107.     Print("Medie punti per giorno della settimana:");
  108.     Print("Lun: ", NumToStr(avgPerDay[0], 3)); // Cambia i decimali del print ultimo numero prima della chiusura dell'ultima parentesi tonda !!!
  109.     Print("Mar: ", NumToStr(avgPerDay[1], 3));
  110.     Print("Mer: ", NumToStr(avgPerDay[2], 3));
  111.     Print("Gio: ", NumToStr(avgPerDay[3], 3));
  112.     Print("Ven: ", NumToStr(avgPerDay[4], 3));
  113.     Print("Sab: ", NumToStr(avgPerDay[5], 3));
  114.     Print("Dom: ", NumToStr(avgPerDay[6], 3));
  115. end;
  116.  
  117. // Aggiunto Personalmente il Print Debug !!!
  118. if LastBarOnChart then begin
  119.     Print("Medie in $ per giorno della settimana:");
  120.     Print("Lun: ", NumToStr(avgPerDay[0] * BigPointValue, 2)); // Cambia i decimali del print ultimo numero prima della chiusura dell'ultima parentesi tonda !!!
  121.     Print("Mar: ", NumToStr(avgPerDay[1] * BigPointValue, 2));
  122.     Print("Mer: ", NumToStr(avgPerDay[2] * BigPointValue, 2));
  123.     Print("Gio: ", NumToStr(avgPerDay[3] * BigPointValue, 2));
  124.     Print("Ven: ", NumToStr(avgPerDay[4] * BigPointValue, 2));
  125.     Print("Sab: ", NumToStr(avgPerDay[5] * BigPointValue, 2));
  126.     Print("Dom: ", NumToStr(avgPerDay[6] * BigPointValue, 2));
  127. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement