Untitled

mail@pastecode.io avatar
unknown
plain_text
7 months ago
13 kB
8
Indexable
Never

//@version=5


strategy('NDX100 Momentum - live', overlay=true,default_qty_type=strategy.fixed, currency=currency.USD)
import HeWhoMustNotBeNamed/RecursiveAlerts/2 as ra

//Step 1. What all parameters(keys) need to be sent in alerts.
keys = array.from("{side}","{amount}", "{stop}", "{final_target}")

keys2 = array.from("{close}")

//Step 2. Create a default alert template
template = '{side} NDX100 Q={amount} \nupdate NDX100 SL={stop}, TP={final_target}\n'

template2='
         {close}'


//Step 3. Create a user input where users can [symbol=alter]alter[/symbol] the default alert template
inputTemplate = input.text_area(template, 'Alert Template')

inputTemplateCLOSE = input.text_area(template2, 'Alert Template CLOSE')


// Calculate Moving Averages
ma20s = ta.sma(close,10)
ma200s = ta.ema(close, 30)

ma20l = ta.sma(close,4)
ma200l = ta.ema(close, 200)

// Determine if it's the first 2 min candle after market open\
var bool firstCandle = na

var bool secondCandle = na
var bool thirdCandle = na

var bool beforeTenAM = na



//if(hour(time, 'UTC-5') == 09 and minute(time, 'UTC-5') == 0)
    //firstCandle :=hour(time, 'UTC-5') == 09 and minute(time, 'UTC-5') == 0

if(hour(time, 'UTC-5') == 10 and minute(time, 'UTC-5') == 30)
    firstCandle := hour(time, 'UTC-5') == 10 and minute(time, 'UTC-5') == 30
    secondCandle:=hour(time, 'UTC-5') == 09 and minute(time, 'UTC-5') == 00
    thirdCandle:=hour(time, 'UTC-5') == 12 and minute(time, 'UTC-5') == 00
    beforeTenAM := hour(time, 'UTC-5')  ==14 and minute(time, 'UTC-5') == 30


else
    firstCandle := hour(time, 'UTC-4') == 10 and minute(time, 'UTC-4') == 30
    secondCandle:= hour(time, 'UTC-4') == 09 and minute(time, 'UTC-4') == 00
    beforeTenAM := hour(time, 'UTC-4')  ==14 and minute(time, 'UTC-4') == 30
    thirdCandle:=hour(time, 'UTC-4') == 12 and minute(time, 'UTC-4') == 00


// Determine if it's before 10:00
//beforeTenAM = hour(time, 'UTC-4')  ==15
currentBalance = strategy.initial_capital + strategy.netprofit

// Conditions for entry LONG
greenCandle = close[0] > open[0]
aboveMA20l = close[0] > ma20l[0]
aboveMA200l = close[0] > ma200l[0]

// Conditions for entry SHORT
redCandle = close[0] < open[0]
belowMA20s = close[0] < ma20s[0]
belowMA200s = close[0] < ma200s[0]

// Initialize stop loss, risk, and take profit levels for LONG and SHORT
var float longStopLevel = na
var float longRisk = na
var float longTakeProfitLevel = na
var float shortStopLevel = na
var float shortRisk = na
var float shortTakeProfitLevel = na
isFriday = dayofweek == dayofweek.friday
isTuesday = dayofweek == dayofweek.tuesday

isMonday = dayofweek == dayofweek.monday
balanceInContracts = math.abs(currentBalance/close)
equity = strategy.equity
risk_percentage = 0.008
dollar_risk = currentBalance * risk_percentage

//or  hour(time, 'UTC-4') == 09 and minute(time, 'UTC-4') == 00)
if (year >= 202 and month>= 0 )
    if  (firstCandle    and aboveMA20l and aboveMA200l) 
    // for testing
    //if  (open<close)
        if strategy.position_size <=-1
            strategy.close_all()
            values = array.from("close NDX100")
            alertMessage = ra.updateAlertTemplate(inputTemplateCLOSE, keys2, values)
            alert(alertMessage, alert.freq_once_per_bar_close)


        longStopLevel := low[0]-10
        longRisk := close[0] - low[0]
        longTakeProfitLevel := close[0] + 3 * longRisk
        
        entry_quantity = (equity * 3) / (close-longStopLevel * 0.02)
        longPositionSize = dollar_risk / (close[0] - low[0])

        long_risk_per_share = math.abs(close[0] - longStopLevel)
        long_balanceInContracts = long_risk_per_share > 0 ? dollar_risk / long_risk_per_share : 0

        strategy.entry('Buy', strategy.long, qty=long_balanceInContracts)

        values = array.from("buy",str.tostring(long_balanceInContracts/10), str.tostring(longStopLevel), str.tostring(longTakeProfitLevel))
        alertMessage = ra.updateAlertTemplate(inputTemplate, keys, values)
        alert(alertMessage, alert.freq_once_per_bar_close)
        //strategy.exit('tp1', 'Buy',limit=close[0] + 3 * longRisk, qty_percent = 50)
       // strategy.exit('Long Exit', 'Buy', stop=longStopLevel, limit=longTakeProfitLevel,qty_percent = 100)
        strategy.exit('Long Exit', 'Buy', stop=longStopLevel, limit=longTakeProfitLevel)


    if  (secondCandle    and aboveMA20l and aboveMA200l ) 
    // for testing
    //if  (open<close)
        if strategy.position_size <=-1
            strategy.close_all()
            values = array.from("close NDX100")
            alertMessage = ra.updateAlertTemplate(inputTemplateCLOSE, keys2, values)
            alert(alertMessage, alert.freq_once_per_bar_close)


        longStopLevel := low[0]-10
        longRisk := close[0] - low[0]
        longTakeProfitLevel := close[0] + 1 * longRisk
        
        entry_quantity = (equity * 3) / (close-longStopLevel * 0.02)
        longPositionSize = dollar_risk / (close[0] - low[0])

        long_risk_per_share = math.abs(close[0] - longStopLevel)
        long_balanceInContracts = long_risk_per_share > 0 ? dollar_risk / long_risk_per_share : 0

        strategy.entry('Buy', strategy.long, qty=long_balanceInContracts)

        values = array.from("buy",str.tostring(long_balanceInContracts/10), str.tostring(longStopLevel), str.tostring(longTakeProfitLevel))
        alertMessage = ra.updateAlertTemplate(inputTemplate, keys, values)
        alert(alertMessage, alert.freq_once_per_bar_close)
        //strategy.exit('tp1', 'Buy',limit=close[0] + 3 * longRisk, qty_percent = 50)
       // strategy.exit('Long Exit', 'Buy', stop=longStopLevel, limit=longTakeProfitLevel,qty_percent = 100)
        strategy.exit('Long Exit', 'Buy', stop=longStopLevel, limit=longTakeProfitLevel)

    

        strategy.exit('Long Exit', 'Buy', stop=longStopLevel, limit=longTakeProfitLevel,qty_percent = 100)


    // if  (secondCandle and greenCandle   and aboveMA20l and aboveMA200l) 
    // // for testing
    // //if  (open<close)
    //     if strategy.position_size <=-1
    //         strategy.close_all()
    //         values = array.from("close NDX100")
    //         alertMessage = ra.updateAlertTemplate(inputTemplateCLOSE, keys2, values)
    //         alert(alertMessage, alert.freq_once_per_bar_close)
    //     strategy.entry('Buy', strategy.long,qty=balanceInContracts)

    //     longStopLevel := low[0]-10
    //     longRisk := close[0] - low[0]
    //     longTakeProfitLevel := close[0] + 2 * longRisk
    //     values = array.from("buy",str.tostring(balanceInContracts/10), str.tostring(longStopLevel), str.tostring(longTakeProfitLevel))
    //     alertMessage = ra.updateAlertTemplate(inputTemplate, keys, values)
    //     alert(alertMessage, alert.freq_once_per_bar_close)
    //     //strategy.exit('Long Exit', 'Buy', stop=longStopLevel, limit=longTakeProfitLevel)

    // if  (secondCandle and greenCandle   and aboveMA20l and aboveMA200l) 
    // // for testing
    // //if  (open<close)
    //     if strategy.position_size <=-1
    //         strategy.close_all()
    //         values = array.from("close NDX100")
    //         alertMessage = ra.updateAlertTemplate(inputTemplateCLOSE, keys2, values)
    //         alert(alertMessage, alert.freq_once_per_bar_close)


    //     longStopLevel := low[0]-10
    //     longRisk := close[0] - low[0]
    //     longTakeProfitLevel := close[0] + 1.5 * longRisk
        
    //     entry_quantity = (equity * 3) / (close-longStopLevel * 0.02)
    //     longPositionSize = dollar_risk / (close[0] - low[0])

    //     long_risk_per_share = math.abs(close[0] - longStopLevel)
    //     long_balanceInContracts = long_risk_per_share > 0 ? dollar_risk / long_risk_per_share : 0

    //     strategy.entry('Buy', strategy.long, qty=long_balanceInContracts)

    //     values = array.from("buy",str.tostring(long_balanceInContracts/10), str.tostring(longStopLevel), str.tostring(longTakeProfitLevel))
    //     alertMessage = ra.updateAlertTemplate(inputTemplate, keys, values)
    //     alert(alertMessage, alert.freq_once_per_bar_close)
    //     //strategy.exit('tp1', 'Buy',limit=close[0] + 3 * longRisk, qty_percent = 50)
    //    // strategy.exit('Long Exit', 'Buy', stop=longStopLevel, limit=longTakeProfitLevel,qty_percent = 100)
    //     strategy.exit('Long Exit', 'Buy', stop=longStopLevel, limit=longTakeProfitLevel)



    if firstCandle and redCandle and belowMA20s and belowMA200s
    //for testing 
    //if  (close<open)
        if strategy.position_size >=1
            strategy.close_all()
            values = array.from("close NDX100")
            alertMessage = ra.updateAlertTemplate(inputTemplateCLOSE, keys2, values)
            alert(alertMessage, alert.freq_once_per_bar_close)
        shortPositionSize = dollar_risk / (high[0] - close[0])
        
        // when we get to 10K+ we can adjust the sl
        shortStopLevel:= high+10
        shortRisk := high[0] - close[0]
        shortTakeProfitLevel := close[0] - 1 * shortRisk
        entry_quantity = (equity * 3) / (shortStopLevel-close * 0.0)

        short_risk_per_share = math.abs(shortStopLevel - close[0])
        short_balanceInContracts = short_risk_per_share > 0 ? dollar_risk / short_risk_per_share : 0

        strategy.entry('Sell', strategy.short,qty=short_balanceInContracts)
        values = array.from("sell",str.tostring(short_balanceInContracts/10), str.tostring(shortStopLevel), str.tostring(shortTakeProfitLevel))
        alertMessage = ra.updateAlertTemplate(inputTemplate, keys, values)
        alert(alertMessage, alert.freq_once_per_bar_close)
        //strategy.exit('tp1', 'Sell', limit=close[0] - 1 * shortRisk, qty_percent = 75)

        strategy.exit('Short Exit', 'Sell', stop=shortStopLevel, limit=shortTakeProfitLevel)




    // if secondCandle and redCandle and belowMA20s and belowMA200s
    // //for testing 
    // //if  (close<open)
    //     if strategy.position_size >=1
    //         strategy.close_all()
    //         values = array.from("close NDX100")
    //         alertMessage = ra.updateAlertTemplate(inputTemplateCLOSE, keys2, values)
    //         alert(alertMessage, alert.freq_once_per_bar_close)
    //     shortPositionSize = dollar_risk / (high[0] - close[0])
        
    //     // when we get to 10K+ we can adjust the sl
    //     shortStopLevel:= high+10
    //     shortRisk := high[0] - close[0]
    //     shortTakeProfitLevel := close[0] - 1 * shortRisk
    //     entry_quantity = (equity * 3) / (shortStopLevel-close * 0.0)

    //     short_risk_per_share = math.abs(shortStopLevel - close[0])
    //     short_balanceInContracts = short_risk_per_share > 0 ? dollar_risk / short_risk_per_share : 0

    //     strategy.entry('Sell', strategy.short,qty=short_balanceInContracts)
    //     values = array.from("sell",str.tostring(short_balanceInContracts/10), str.tostring(shortStopLevel), str.tostring(shortTakeProfitLevel))
    //     alertMessage = ra.updateAlertTemplate(inputTemplate, keys, values)
    //     alert(alertMessage, alert.freq_once_per_bar_close)
    //     //strategy.exit('tp1', 'Sell', limit=close[0] - 1 * shortRisk, qty_percent = 75)

    //     strategy.exit('Short Exit', 'Sell', stop=shortStopLevel, limit=shortTakeProfitLevel)


    



    //strategy.exit('Short Exit', 'Sell', stop=shortStopLevel, limit=shortTakeProfitLevel)

        

// // Check if the price has reached 2R and update stop loss accordingly
// if (strategy.position_size > 0)
//     if (close[0] >= (strategy.position_avg_price +  2.5 * longRisk))
//         longStopLevel := strategy.position_avg_price + longRisk 

// if (strategy.position_size < 0)
//     if (close[0] <= (strategy.position_avg_price - 5 * shortRisk))
//         shortStopLevel := strategy.position_avg_price - shortRisk

// Set exit orders
// if (strategy.position_size > 0)
//     strategy.exit('Long Exit', 'Buy', stop=longStopLevel, limit=longTakeProfitLevel)
    
// if (strategy.position_size < 0)
//     strategy.exit('Short Exit', 'Sell', stop=shortStopLevel, limit=shortTakeProfitLevel)
  
// if ( beforeTenAM and isFriday )
//     strategy.close_all()
// Exit condition
//if (isFriday)
// // // // //     //and strategy.openprofit<0)
// // // // //     //and close[0] <= (strategy.position_avg_price)) 
  //  strategy.close_all()

// plot(longStopLevel, color=color.new(color.red, 0), linewidth=2)
// plot( longTakeProfitLevel, color=color.new(color.green, 0), linewidth=2)



plot(ma200l, color=color.new(color.green, 0), linewidth=2)
plot( ma20l, color=color.new(color.green, 0), linewidth=2)

plot(ma200s, color=color.new(color.red, 0), linewidth=2)
plot( ma20s, color=color.new(color.red, 0), linewidth=2)