#############################################
# Перевел на русский язык: Павел Эльба.
# Ссылка на страницу: http://vk.com/pavel_elba
# Сигналы для бинарных опционов.
# Ссылка на группу http://vk.com/boprofit
#############################################
input price = close;
input showOnlyToday = no;
input ShowLabels = yes;
input period = AggregationPeriod.DAY;
def RangeHigh = high(period = period)[0];
def RangeLow = low(period = period)[0];
def RangeSize = AbsValue(RangeHigh - RangeLow);
def MMLevel8 = 8 / 8;
def MMLevel7 = 7 / 8;
def MMLevel6 = 6 / 8;
def MMLevel5 = 5 / 8;
def MMLevel4 = 4 / 8;
def MMLevel3 = 3 / 8;
def MMLevel2 = 2 / 8;
def MMLevel1 = 1 / 8;
def MMLevel0 = 0 / 8;
def TimeCondition = IsNaN(Close[-1]) and !IsNaN(close[0]) and ShowLabels;
def MML8 = RangeHigh;
def MML7 = RangeLow + RangeSize * (MMLevel7);
def MML6 = RangeLow + RangeSize * (MMLevel6);
def MML5 = RangeLow + RangeSize * (MMLevel5);
def MML4 = RangeLow + RangeSize * (MMLevel4);
def MML3 = RangeLow + RangeSize * (MMLevel3);
def MML2 = RangeLow + RangeSize * (MMLevel2);
def MML1 = RangeLow + RangeSize * (MMLevel1);
def MML0 = RangeLow;
plot Level8;
plot Level7;
plot Level6;
plot Level5;
plot Level4;
plot Level3;
plot Level2;
plot Level1;
plot Level0;
if showOnlyToday and !IsNaN(close(period = period)[-1])
then {
Level8 = Double.NaN;
Level7 = Double.NaN;
Level6 = Double.NaN;
Level5 = Double.NaN;
Level4 = Double.NaN;
Level3 = Double.NaN;
Level2 = Double.NaN;
Level1 = Double.NaN;
Level0 = Double.NaN;
} else {
Level8 = MML8;
Level7 = MML7;
Level6 = MML6;
Level5 = MML5;
Level4 = MML4;
Level3 = MML3;
Level2 = MML2;
Level1 = MML1;
Level0 = MML0;
}
Level8.SetDefaultColor(color.green);
Level8.HideBubble();
Level8.SetLineWeight(1);
AddChartBubble(TimeCondition, MML8, "8/8 СОПРОТИВЛЕНИЕ", color.green, yes);
Level7.SetDefaultColor(color.cyan);
Level7.SetStyle(curve.Short_Dash);
Level7.HideBubble();
AddChartBubble(TimeCondition , MML7, "7/8 ОСТАНОВКА_РАЗВОРОТ",
color.yellow, yes);
Level6.SetDefaultColor(color.yellow);
Level6.SetLineWeight(1);
Level6.HideBubble();
AddChartBubble(TimeCondition , MML6, "6/8 ВРАЩЕНИЕ_РАЗВОРОТ", color.pink,
yes);
Level5.SetDefaultColor(color.pink);
Level5.SetStyle(curve.Short_Dash);
Level5.HideBubble();
AddChartBubble(TimeCondition , MML5, "5/8 ВЕРХ_КАНАЛА",
color.green, yes);
Level4.SetDefaultColor(color.green);
Level4.SetLineWeight(1);
Level4.HideBubble();
AddChartBubble(TimeCondition ,MML4, "4/8 СОПРОТИВЛЕНИЕ_ПОДДЕРЖКА", color.cyan, yes);
Level3.SetDefaultColor(color.cyan);
Level3.SetStyle(curve.Short_Dash);
Level3.HideBubble();
AddChartBubble(TimeCondition ,MML3, "3/8 ДНО_КАНАЛА", color.green, yes);
Level2.SetDefaultColor(color.green);
Level2.SetLineWeight(1);
Level2.HideBubble();
AddChartBubble(TimeCondition ,MML2, "2/8 ВРАЩЕНИЕ_РАЗВОРОТ", color.pink, yes);
Level1.SetDefaultColor(color.pink);
Level1.SetStyle(curve.Short_Dash);
Level1.HideBubble();
AddChartBubble(TimeCondition ,MML1, "1/8 ОСТАНОВКА_РАЗВОРОТ", color.yellow, yes);
Level0.SetDefaultColor(color.red);
Level0.HideBubble();
Level0.SetLineWeight(1);
AddChartBubble(TimeCondition ,MML0, "0/8 ПОДДЕРЖКА", color.red, yes);
def up1 = if low <= MML0 and price > MML0 then open > close else 0;
def up2 = if low <= MML1 and price > MML1 then open > close else 0;
def up3 = if low <= MML2 and price > MML2 then open > close else 0;
def down1 = if high >= MML8 and price < MML8 then open < close else 0;
def down2 = if high >= MML7 and price < MML7 then open < close else 0;
def down3 = if high >= MML6 and price < MML6 then open < close else 0;
plot up = up1 or up2 or up3;
Up.SetDefaultColor(Color.WHITE);
Up.SetLineWeight(4);
Up.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_UP);
Alert(Up, "CALL Alert", Alert.BAR, Sound.Ring);
plot down = down1 or down2 or down3;
Down.SetDefaultColor(Color.WHITE);
Down.SetLineWeight(4);
Down.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_DOWN);
Alert(Down, "PUT Alert", Alert.BAR, Sound.Ring);
##########---------------------------TEST OPTIONS---------------------------------------------
#hint timetest: Test according to timeperiods
#hint expiry: Numbers of candles after signal (1 = next candle after signal, 2 = second candle)
#hint secondcandle: Use only if candleexpiry = 1. Adding signals taking second candle after loss
#hint moneycount: display labels with profit/loss in $
#hint invest: amount of investment per trade
#hint RPI: Return Per Investment (payout)
input expiry = 1;
input secondcandle = no;
input moneycount = no;
input invest = 25;
input RPI = 0.80;
input timetest = no;
########-------------------------------------------TIME FILTER-----------------------------------------------
#hint TradingOpen1: EST NY TIME
input TradingOpen1 = 330;
input TradingClose1 = 530;
input TradingOpen2 = 0930;
input TradingClose2 = 1130;
#hint input AsiaOpenTime1 = 2000;
#hint input AsiaCloseTime1 = 2359;
#hint input AsiaOpenTime2 = 0000;
#hint input AsiaCloseTime2 = 0200;
#hint input EUOpenTime = 330;
#hint input EUCloseTime = 530;
#hint input USOpenTime = 0930;
#hint input USCloseTime = 1130;
# Set below to 'True' to allow for DST difference adjustment if you are setting
# windows up for a european instrument like the euro.
input EnableDSTAutoAdjust = {default "Yes", "No"};
input DSTOffsetHours = 1;
#==========================================================================
# Figure out DST adjustment for diffence between USA and europe
#==========================================================================
#basically, if we are after the 2nd Sunday in March and before
#the last Sunday in March, we need to offset the Trading Windows by 1hr forward
#if we are after the last Sunday in Oct, until the 1st Sunday in Nov
# we need to offset the trading windows by 1hr backward...
def CurrentYear = GetYear();
def CurrentMonth = GetMonth();
def CurrentDOM = GetDayOfMonth(GetYYYYMMDD());
#What is the first day of the week for the 1st of this month?
def Day1DOW1 = GetDayOfWeek(CurrentYear * 10000 + CurrentMonth * 100 + 1);
def FirstSundayDOM1 = if Day1DOW1 < 7
then 7 - Day1DOW1 + 1
else 1;
def SecondSundayOfMonth = FirstSundayDOM1 + 7;
def isMarch = If (CurrentMonth == 3, 1, 0);
def SpringDSTShiftStart = If (isMarch and (SecondSundayOfMonth <= CurrentDOM), 1, 0);
#last sunday in march...
def SpringDSTShiftStop = If (isMarch and ((SecondSundayOfMonth + 14) > CurrentDOM), 1, 0);
def DoSpringShift = If (SpringDSTShiftStart and SpringDSTShiftStop and EnableDSTAutoAdjust, 1, 0);
def isOctober = If (CurrentMonth == 10, 1, 0);
def isNovember = If (CurrentMonth == 11, 1, 0);
def FallDSTShiftStart = If (isOctober and ((SecondSundayOfMonth + 14) <= CurrentDOM), 1, 0);
def FallDSTShiftStop = If (isNovember and FirstSundayDOM1 > CurrentDOM, 1, 0);
def DoFallShift = If (FallDSTShiftStart or FallDSTShiftStop and EnableDSTAutoAdjust, 1, 0);
def isToday = If(GetDay() == GetLastDay(), 1, 0);
#PITA. SecondsTillTime only takes constants... Need to manually adjust for DST if it's enabled.
def DSTAdjust = If (DoSpringShift, DSTOffsetHours * 3600, If (DoFallShift, -DSTOffsetHours * 3600, 0));
def TradingOpenTime1 = If((SecondsTillTime(TradingOpen1) + DSTAdjust > 0), 0, 1);
def TradingCloseTime1 = If((SecondsTillTime(TradingClose1) + DSTAdjust > 0), 0, 1);
def TradingWindow1 = If(TradingOpenTime1 and !TradingCloseTime1, 1, 0);
def TradingOpenTime2 = If((SecondsTillTime(TradingOpen2) + DSTAdjust > 0), 0, 1);
def TradingCloseTime2 = If((SecondsTillTime(TradingClose2) + DSTAdjust > 0), 0, 1);
def TradingWindow2 = If(TradingOpenTime2 and !TradingCloseTime2, 1, 0);
AddVerticalLine(TradingWindow1 and TradingWindow1[1] == 0, "TradingOpen 1" , Color.GREEN, Curve.SHORT_DASH);
AddVerticalLine(TradingWindow1 == 0 and TradingWindow1[1], "TradingClose 1" , Color.RED, Curve.SHORT_DASH);
AddVerticalLine(TradingWindow2 and TradingWindow2[1] == 0, "TradingOpen 2" , Color.GREEN, Curve.SHORT_DASH);
AddVerticalLine(TradingWindow2 == 0 and TradingWindow2[1], "TradingClose 2" , Color.RED, Curve.SHORT_DASH);
#####-------------------------------------TESTER-----------------------------------------------------
def ITM = if timetest and TradingWindow1 == 0 and TradingWindow2 == 0 then 0 else if (Up[expiry] and close[0] > close[expiry]) or (Down[expiry] and close[0] < close[expiry]) or (secondcandle and Up[2] and close[1] < close[2] and close > close[1]) or (secondcandle and Down[2] and close[1] > close[2] and close < close[1]) then 1 else 0;
def itmsum = TotalSum(ITM);
def OTM = if timetest and TradingWindow1 == 0 and TradingWindow2 == 0 then 0 else if (Up[expiry] and close[0] < close[expiry]) or (Down[expiry] and close[0] > close[expiry]) or (secondcandle and Up[2] and close[1] < close[2] and close < close[1]) or (secondcandle and Down[2] and close[1] > close[2] and close > close[1]) then 1 else 0;
def otmsum = TotalSum(OTM);
def itmrate = RoundUp((itmsum / (itmsum + otmsum) * 100), 2);
def label = 1;
AddLabel(label, Concat("ITM = ", itmsum), Color.GREEN);
AddLabel(label, Concat("OTM = ", otmsum), Color.RED);
AddLabel(label, Concat("ITM RATE = %", itmrate), Color.WHITE);
#####---------Moneycount--------------------------------------------
def PL = invest*itmsum*rpi-invest*otmsum;
def PLColor = if PL > 0 then 6 else 5;
AddLabel(moneycount, Concat("PROFIT/LOSS = $", PL),GetColor(PLColor));