Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ============================================================
- // *** BOT AZIONARIO NASDAQ MULTI TICKER TREND LONG 1440 MIN *** //
- // ============================================================
- // ============================================================
- // TIPO STRATEGIA: TREND
- // STRUMENTO: AZIONARIO NASDAQ MULTI TICKER
- // TICKER: TRADESTATION 100 TICKER NASDAQ CSV IN CARTELLA
- // TIMEFRAME: 1440 MIN
- // DATI: TRADESTATION DAL 01/01/2006 AL 01/04/2026
- // SESSIONI: EXCHANGE TIME
- // LUN-LUN 09:30 - 16:00 SESSION END YES
- // MAR-MAR 09:30 - 16:00 SESSION END YES
- // MER-MER 09:30 - 16:00 SESSION END YES
- // GIO-GIO 09:30 - 16:00 SESSION END YES
- // VEN-VEN 09:30 - 16:00 SESSION END YES
- // MINI PAUSA : NO
- // BARS BACK: 200
- // COMMISSIONI SVILUPPO: 0
- // COMMISSIONI DOPO SVILUPPO: 1$, 2$ TOT, 2 TICK SLIPPAGE
- // POSITION SIZE SVILUOPPO 10000 / CLOSE
- // CORRELAZIONI STRUMENTI: S&P 500 / RUSSEL 2000
- // ============================================================
- // ==================LONG======================================
- // DESCRIZIONE INGRESSO: UNA PERCENTUALE DEI TITOLI NASDAQ È SOPRA NUOVI 52W HIGH / CLOSE > SMA / SUPERTREND / PATTERN INCLUSIONE SETTIMANALE / PATTERN ESCLUSIONE SETTIMANALE
- // DESCRIZIONE USCITA: CLOSE CROSS UNDER LEADLINE2 E CONVERSIONELINE > LEADLINE / NO SUPERTREND / TRAILING STOP PERCENTUALE
- // ESCLUSIONI: MESI/GIORNI/ORE NESSUNA
- // ============================================================
- // ============================================================================
- // INIZIO FILTRO RISK ON RISK OFF DATA 2 $52WHLQD 1440 MIN
- // ============================================================================
- // Questo era il PRIMO tentativo di filtro Risk-On / Risk-Off basato su: Close > data2 = simbolo $52WHLQD (52 Week High/Low Nasdaq 1440 min)
- // È stato sostituito dal nuovo filtro HLIDX più avanzato sotto. Lo teniamo solo come riferimento per future strategie. NON VIENE USATO NELLA STRATEGIA ATTUALE.
- // Logica:
- // - Calcola la media a 10 periodi del Close di Data2
- // - Se Close > Media → mercato in regime Risk-On → BreadthOK = true
- // - Se Close < Media → mercato Risk-Off → BreadthOK = false
- // ============================================================================
- { Vars: Breadth(0), BreadthMA(0), BreadthOK(false);
- Breadth = Close of Data2;
- BreadthMA = Average(Breadth, 10);
- If Breadth > BreadthMA then
- BreadthOK = true
- else
- BreadthOK = false; }
- // ============================================================================
- // FINE FILTRO RISK ON RISK OFF DATA 2 $52WHLQD 1440 MIN
- // ============================================================================
- // ============================================================================
- // INIZIO FILTRO MARKET REGIME – RISK ON / RISK OFF (ATTIVO)
- // ============================================================================
- // Data2 = simbolo $52WHLQD 1440 min → indice Market Breadth Nasdaq
- // Misura quanti titoli fanno nuovi 52 Week High vs 52 Week Low.
- //
- // LOGICA:
- // 1) Prendiamo High e Low di Data2 (numero titoli a nuovi massimi/minimi)
- // 2) Costruiamo un rapporto di forza del mercato:
- //
- // Ratio = High / (High + Low)
- //
- // → vicino a 1 = tanti nuovi massimi = mercato forte
- // → vicino a 0 = tanti nuovi minimi = mercato debole
- //
- // 3) Smussiamo il Ratio con una media (EMA o SMA)
- // controllata dagli Inputs:
- //
- // Len = velocità del filtro regime (sensibilità)
- // UseEMA = 1 usa EMA (più reattiva)
- // 0 usa SMA (più lenta)
- //
- // 4) Convertiamo in percentuale:
- //
- // HLIDX = media(Ratio) * 100
- //
- // 5) Determinazione regime:
- //
- // HLIDX > 50 → RISK ON → BreadthOK = true
- // HLIDX < 50 → RISK OFF → BreadthOK = false
- //
- // Questo filtro è ATTIVO nella strategia e blocca le entrate
- // quando il mercato globale non è in regime favorevole.
- // ============================================================================
- // INIZIO FILTRO MARKET REGIME – RISK ON / RISK OFF (ATTIVO)
- // ============================================================================
- Inputs:
- Len(10),
- UseEMA(1),
- OffsetPct(50);
- Vars:
- Highs(0),
- Lows(0),
- Ratio(0),
- HLIDX(0),
- BreadthOK(false),
- RangeLow(0),
- RangeHigh(0),
- PlotVal(0);
- If BarNumber of Data2 >= Len then begin
- // =========================
- // DATA
- // =========================
- Highs = High of Data2;
- Lows = Low of Data2;
- // =========================
- // RATIO
- // =========================
- If (Highs + Lows) > 0 then
- Ratio = Highs / (Highs + Lows)
- else
- Ratio = 0;
- // =========================
- // SMOOTH 1= EMA 0=SMA
- // =========================
- If UseEMA = 1 then
- HLIDX = XAverage(Ratio, Len) * 100
- else
- HLIDX = Average(Ratio, Len) * 100;
- // =========================
- // REGIME (color logic)
- // =========================
- If HLIDX > OffsetPct then
- BreadthOK = true
- else
- BreadthOK = false;
- end
- else
- BreadthOK = false; // default: non aprire trade se dati insufficienti
- // ============================================================================
- // FINE FILTRO MARKET REGIME – RISK ON / RISK OFF (ATTIVO)
- // ============================================================================
- // ============================================================================
- // INIZIO MEDIA MOBILE LUNGA – SIMPLE MOVING AVERAGE
- // ============================================================================
- Inputs:
- LongLen(200);
- Vars:
- LongMA(0);
- LongMA = Average(Close, LongLen);
- // ============================================================================
- // FINE MEDIA MOBILE LUNGA – SIMPLE MOVING AVERAGE
- // ============================================================================
- // ============================================================================
- // INIZIO ICHIMOKU
- // ============================================================================
- Inputs:
- ConversionPeriods(9),
- BasePeriods(26),
- TenkanLen(5),
- LeadLine2LowPeriods(26),
- SpanBPeriods(52);
- vars:
- ConversionLine(0),
- BaseLine(0),
- LeadLine1(0),
- LeadLine2(0),
- SpanA(0),
- Kijun(0),
- Tenkan(0),
- Slope(0);
- // ===== DONCHIAN =====
- ConversionLine = (Lowest(Low, ConversionPeriods) + Highest(High, ConversionPeriods)) / 2;
- BaseLine = (Lowest(Low, BasePeriods) + Highest(High, BasePeriods)) / 2;
- // ===== LEADING SPANS =====
- LeadLine1 = (ConversionLine + BaseLine) / 2;
- LeadLine2 = (Lowest(Low, LeadLine2LowPeriods) + Highest(High, SpanBPeriods)) / 2; // Originale 52 PERIODI: LeadLine2 = (Lowest(Low, SpanBPeriods) + Highest(High, SpanBPeriods)) / 2; SOSTITUITO SpanBPeriods CON LeadLine2LowPeriods ORIGINALE LA PORTA A 52 PERIODI, QUI MESSA A 26. PIU' VELOCE !!!
- Tenkan = (Highest(High,9) + Lowest(Low,9)) / 2;
- Slope = Tenkan - Tenkan[TenkanLen];
- SpanA = (Tenkan + Kijun) / 2;
- // ============================================================================
- // FINE ICHIMOKU
- // ============================================================================
- // ============================================================================
- // INIZIO SUPERTREND
- // ============================================================================
- Inputs:
- atrPeriod(10),
- factor(3); //ANCHE 2.1 VA BENE
- Vars:
- atr(0),
- upperBand(0),
- lowerBand(0),
- finalUpper(0),
- finalLower(0),
- supertrend(0),
- direction(0); // -1 = uptrend, +1 = downtrend
- // --- ATR ---
- atr = AvgTrueRange(atrPeriod);
- // --- Bande base ---
- upperBand = (High + Low) / 2 + factor * atr;
- lowerBand = (High + Low) / 2 - factor * atr;
- // --- Inizializzazione ---
- if CurrentBar = 1 then begin
- finalUpper = upperBand;
- finalLower = lowerBand;
- direction = 1;
- end
- else begin
- // --- Upper band (trailing) ---
- if upperBand < finalUpper[1] or Close[1] > finalUpper[1] then
- finalUpper = upperBand
- else
- finalUpper = finalUpper[1];
- // --- Lower band (trailing) ---
- if lowerBand > finalLower[1] or Close[1] < finalLower[1] then
- finalLower = lowerBand
- else
- finalLower = finalLower[1];
- // --- Direzione ---
- if supertrend[1] = finalUpper[1] then begin
- if Close > finalUpper then
- direction = -1 // uptrend
- else
- direction = 1; // downtrend
- end
- else begin
- if Close < finalLower then
- direction = 1
- else
- direction = -1;
- end;
- end;
- if direction = -1 then
- supertrend = finalLower
- else
- supertrend = finalUpper;
- // ============================================================================
- // FINE SUPERTREND
- // ============================================================================
- // ============================================================================
- // ENTRY LONG 10000 $ PER POSIZIONE
- // ============================================================================
- If MarketPosition = 0
- //and BreadthOK
- and HLIDX > 50
- and Close > LongMA
- and direction < 0
- and (loww(1)<loww(5)) //PtnBaseSA(MyPtnLY) // 23
- and (highw(1)>highw(5)) = False //PtnBaseSA(MyPtnLN) = false // 21
- then
- Buy 10000/Close shares Next Bar at Market;
- // ============================================================================
- // EXIT LONG 1
- // ============================================================================
- If MarketPosition = 1 then
- begin
- If close cross under leadLine2 and conversionLine > leadLine2 then
- Sell ("LE_1") Next Bar at Market;
- end;
- // ============================================================================
- // EXIT LONG 2
- // ============================================================================
- If MarketPosition = 1 then
- begin
- if direction > 0 then
- Sell ("LE_2") Next Bar at Market;
- end;
- // ============================================================================
- // EXIT LONG 3
- // ============================================================================
- // ============================================================
- // BREAKEVEN + BUFFER LONG CON STOP DINAMICO %
- // ============================================================
- // ============================================================
- // ATTENZIONE: TRAILING E BREAK-EVEN
- // ============================================================
- // Questo blocco di codice è progettato **per una sola posizione aperta per ticker**.
- // Se mai dovessi aprire più ingressi sullo stesso ticker (scale-in o multi-entry),
- // le variabili MaxPriceDuringTrade e StopPlaced verrebbero condivise tra tutte le posizioni,
- // causando stop confusi e break-even non corretti.
- // Per sicurezza: aprire **una sola posizione per ticker alla volta**.
- // Aggiornamento MaxPriceDuringTrade a chiusura barra !!!.
- // ============================================================
- Inputs:
- TrailingActive(True),
- InpBreakEvenPercent(50), // 50 = 0.5%
- InpMaxProfitPercent(300); // 300 = 3%
- Vars:
- IntraBarPersist MaxPriceDuringTrade(0), // Massimo intratrade
- IntraBarPersist StopPlaced(False);
- // ============================================================
- // LOGICA TRADE LONG
- // ============================================================
- If TrailingActive and MarketPosition = 1 Then Begin
- // Registrazione prezzo ingresso
- If MaxPriceDuringTrade = 0 Then
- MaxPriceDuringTrade = EntryPrice;
- // Aggiorna massimo intratrade
- MaxPriceDuringTrade = MaxList(MaxPriceDuringTrade, High);
- // Se supero la soglia profitto
- If ((MaxPriceDuringTrade - EntryPrice) / EntryPrice * 10000) >= InpMaxProfitPercent Then Begin
- // Calcolo livello stop
- Vars: StopPrice(0);
- StopPrice = EntryPrice * (1 + InpBreakEvenPercent / 10000);
- // Set stop intrabar sulla posizione intera
- SetStopPosition;
- Sell ("BEPlusStopLong") next bar at StopPrice stop;
- StopPlaced = True;
- End;
- End;
- // ============================================================
- // RESET VARIABILI ALLA CHIUSURA
- // ============================================================
- If MarketPosition = 0 Then Begin
- MaxPriceDuringTrade = 0;
- StopPlaced = False;
- End;
Advertisement