qingxinguayu 發表於 22-9-25 18:10

這個很神奇的趨勢轉折程式碼,有愿意帮忙轉換成mc的嗎?

這個程式碼很複雜,是用thinkscript編寫的.效果很不錯.哪位兄弟姐妹出手,把它轉成MC上面用.不勝感激.
def price = close;
def superfast_length = 9;
def fast_length = 14;
def slow_length = 21;
def displace = 0;

def mov_avg9 = ExpAverage(price[-displace], superfast_length);
def mov_avg14 = ExpAverage(price[-displace], fast_length);
def mov_avg21 = ExpAverage(price[-displace], slow_length);

#moving averages
def Superfast = mov_avg9;
def Fast = mov_avg14;
def Slow = mov_avg21;

def buy = mov_avg9 > mov_avg14 and mov_avg14 > mov_avg21 and low > mov_avg9;
def stopbuy = mov_avg9 <= mov_avg14;
def buynow = !buy and buy;
def buysignal = CompoundValue(1, if buynow and !stopbuy then 1 else if buysignal == 1 and stopbuy then 0 else buysignal, 0);

def Buy_Signal = buysignal == 0 and buysignal == 1;

#Alert(condition = buysignal == 0 and buysignal == 1, text = "Buy Signal", sound = Sound.Bell, "alert type" = Alert.BAR);

def Momentum_Down = buysignal == 1 and buysignal == 0;

#Alert(condition = buysignal == 1 and buysignal == 0, text = "Momentum_Down", sound = Sound.Bell, "alert type" = Alert.BAR);

def sell = mov_avg9 < mov_avg14 and mov_avg14 < mov_avg21 and high < mov_avg9;
def stopsell = mov_avg9 >= mov_avg14;
def sellnow = !sell and sell;
def sellsignal = CompoundValue(1, if sellnow and !stopsell then 1 else if sellsignal == 1 and stopsell then 0 else sellsignal, 0);

def Sell_Signal = sellsignal == 0 and sellsignal;

#Alert(condition = sellsignal == 0 and sellsignal == 1, text = "Sell Signal", sound = Sound.Bell, "alert type" = Alert.BAR);

def Momentum_Up = sellsignal == 1 and sellsignal == 0;

#Alert(condition = sellsignal == 1 and sellSignal == 0, text = "Momentum_Up", sound = Sound.Bell, "alert type" = Alert.BAR);

plot Colorbars = if buysignal == 1 then 1 else if sellsignal == 1 then 2 else if buysignal == 0 or sellsignal == 0 then 3 else 0;
Colorbars.Hide();
Colorbars.DefineColor("Buy_Signal_Bars", Color.GREEN);
Colorbars.DefineColor("Sell_Signal_Bars", Color.RED);
Colorbars.DefineColor("Neutral", Color.PLUM);
#___________________________________________________________________________

input method = {default average, high_low};
def bubbleoffset = .0005;
def percentamount = .01;
def revAmount = .05;
def atrreversal = 2.0;
def atrlength = 5;
def pricehigh = high;
def pricelow = low;
def averagelength = 5;
def averagetype = AverageType.EXPONENTIAL;
def mah = MovingAverage(averagetype, pricehigh, averagelength);
def mal = MovingAverage(averagetype, pricelow, averagelength);
def priceh = if method == method.high_low then pricehigh else mah;
def pricel = if method == method.high_low then pricelow else mal;
def EI = ZigZagHighLow("price h" = priceh, "price l" = pricel, "percentage reversal" = percentamount, "absolute reversal" = revAmount, "atr length" = atrlength, "atr reversal" = atrreversal);
def reversalAmount = if (close * percentamount / 100) > Max(revAmount < atrreversal * reference ATR(atrlength), revAmount) then (close * percentamount / 100) else if revAmount < atrreversal * reference ATR(atrlength) then atrreversal * reference ATR(atrlength) else revAmount;
rec EISave = if !IsNaN(EI) then EI else GetValue(EISave, 1);
def chg = (if EISave == priceh then priceh else pricel) - GetValue(EISave, 1);
def isUp = chg >= 0;
rec isConf = AbsValue(chg) >= reversalAmount or (IsNaN(GetValue(EI, 1)) and GetValue(isConf, 1));
def EId = if isUp then 1 else 0;
#plot EnhancedLines = if EId <= 1 then EI else Double.NaN;
#EnhancedLines.AssignValueColor(if EId == 1 then Color.GREEN else if EId == 0 then Color.RED else Color.DARK_ORANGE);
#EnhancedLines.SetStyle(Curve.FIRM);
#EnhancedLines.EnableApproximation();
#EnhancedLines.HideBubble();
#Price Change between Enhanceds
def xxhigh = if EISave == priceh then priceh else xxhigh;
def chghigh = priceh - xxhigh;
def xxlow = if EISave == pricel then pricel else xxlow;
def chglow = pricel - xxlow;
def showBubbleschange = no;
AddChartBubble(showBubbleschange and !IsNaN(EI) and BarNumber() != 1, if isUp then priceh * (1 + bubbleoffset) else pricel * (1 - bubbleoffset) , "$" + chg , if isUp and chghigh > 0 then Color.GREEN else if isUp and chghigh < 0 then Color.RED else if isUp then Color.YELLOW else if !isUp and chglow > 0 then Color.GREEN else if !isUp and chglow < 0 then Color.RED else Color.YELLOW, isUp);
#Price at High/Low
def showBubblesprice = no;
AddChartBubble(showBubblesprice and !IsNaN(EI) and BarNumber() != 1, if isUp then priceh * (1 + bubbleoffset) else pricel * (1 - bubbleoffset) , if isUp then "$" + priceh else "$" + pricel , if isUp and chghigh > 0 then Color.GREEN else if isUp and chghigh < 0 then Color.RED else if isUp then Color.YELLOW else if !isUp and chglow > 0 then Color.GREEN else if !isUp and chglow < 0 then Color.RED else Color.YELLOW, isUp);
#Label for Confirmed/Unconfirmed Status of Current Enhanced

#Bar Count between Enhanceds
rec EIcount = if EISave != EISave then 1 else if EISave == EISave then EIcount + 1 else 0;
def EIcounthilo = if EIcounthilo == 0 and (EISave == priceh or EISave == pricel) then 1 else if EISave == priceh or EISave == pricel then EIcounthilo + 1 else EIcounthilo;
def EIhilo = if EISave == priceh or EISave == pricel then EIcounthilo else EIcounthilo + 1;
def EIcounthigh = if EISave == priceh then EIcount else Double.NaN;
def EIcountlow = if EISave == pricel then EIcount else Double.NaN;
def showBubblesbarcount = no;
AddChartBubble(showBubblesbarcount and !IsNaN(EI) and BarNumber() != 1, if isUp then priceh * (1 + bubbleoffset) else pricel * (1 - bubbleoffset) , if EISave == priceh then EIcounthigh else EIcountlow, if isUp and chghigh > 0 then Color.GREEN else if isUp and chghigh < 0 then Color.RED else if isUp then Color.YELLOW else if !isUp and chglow > 0 then Color.GREEN else if !isUp and chglow < 0 then Color.RED else Color.YELLOW, if isUp then yes else no );
#Arrows
def EIL = if !IsNaN(EI) and !isUp then pricel else GetValue(EIL, 1);
def EIH = if !IsNaN(EI) and isUp then priceh else GetValue(EIH, 1);
def dir = CompoundValue(1, if EIL != EIL or pricel == EIL and pricel == EISave then 1 else if EIH != EIH or priceh == EIH and priceh == EISave then -1 else dir, 0);
def signal = CompoundValue(1, if dir > 0 and pricel > EIL then if signal <= 0 then 1 else signal else if dir < 0 and priceh < EIH then if signal >= 0 then -1 else signal else signal, 0);
def showarrows = yes;
def U1 = showarrows and signal > 0 and signal <= 0;
#U1.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_UP);
#U1.SetDefaultColor(Color.GREEN);
#U1.SetLineWeight(4);
def D1 = showarrows and signal < 0 and signal >= 0;
#D1.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_DOWN);
#D1.SetDefaultColor(Color.RED);
#D1.SetLineWeight(4);
def barnumber = BarNumber();

AddChartBubble((barnumber and U1), if isUp then low else high, if showarrows and signal > 0 and signal <= 0 then "Reversal:" + low else "" , if Colorbars == 3 then Color.PLUM else Color.UPTICK, no);
AddChartBubble((barnumber and D1), if isUp then low else high, if showarrows and signal < 0 and signal >= 0 then "Reversal:" + high else "" , if Colorbars == 3 then Color.PLUM else Color.DOWNTICK, yes);

def revLineTop;
def revLineBot;

if barnumber and D1 {
revLineBot = Double.NaN;
revLineTop = high;
} else if barnumber and U1 {
revLineTop = Double.NaN;
revLineBot = low;
} else if !IsNaN(revLineBot) and (Colorbars == 2 or Colorbars == 2) {
revLineBot = revLineBot;
revLineTop = Double.NaN;
} else if !IsNaN(revLineTop) and (Colorbars == 1 or Colorbars == 1) {
revLineTop = revLineTop;
revLineBot = Double.NaN;
} else {
revLineTop = Double.NaN;
revLineBot = Double.NaN;
}

plot botLine = revLineBot[-1];
botLine.SetDefaultColor(Color.LIGHT_GREEN);
plot topLine = revLineTop[-1];
topLine.SetDefaultColor(Color.LIGHT_RED);

#Alerts
def usealerts = no;
#Alert(usealerts and U1, "EI-UP", Alert.BAR, Sound.Bell);
#Alert(usealerts and D1, "EI-DOWN", Alert.BAR, Sound.Chimes);
#Supply Demand Areas
rec data1 = CompoundValue(1, if (EISave == priceh or EISave == pricel) then data1 + 1 else data1, 0);
def datacount1 = (HighestAll(data1) - data1);
def numbersuppdemandtoshow = 0;
input showSupplyDemand = {default Pivot, Arrow, None};
def idx = if showSupplyDemand == showSupplyDemand.Pivot then 1 else 0;
def rLow;
def rHigh;
if signal crosses 0 {
rLow = pricel;
rHigh = priceh;
} else {
rLow = rLow;
rHigh = rHigh;
}
def HighLine = if datacount1 <= numbersuppdemandtoshow and showSupplyDemand != showSupplyDemand.None and !IsNaN(close) and rHigh != 0 then rHigh else Double.NaN;

def LowLine = if datacount1 <= numbersuppdemandtoshow and showSupplyDemand != showSupplyDemand.None and !IsNaN(close) and rLow != 0 then rLow else Double.NaN;

def hlUp = if signal > 0 then HighLine else Double.NaN;
def hlDn = if signal < 0 then HighLine else Double.NaN;

def showsupplydemandcloud = no;
AddCloud(if showsupplydemandcloud then hlUp else Double.NaN, LowLine, Color.LIGHT_GREEN, Color.LIGHT_GREEN);
AddCloud(if showsupplydemandcloud then hlDn else Double.NaN, LowLine, Color.LIGHT_RED, Color.LIGHT_RED);
#Store Previous Data
def EIsave1 = if !IsNaN(EISave) then EISave else EIsave1;
def EIsave2 = EIsave1;
rec priorEI1 = if EIsave2 != EIsave2 then EIsave2 else priorEI1;
rec priorEI2 = if priorEI1 != priorEI1 then priorEI1 else priorEI2;
rec priorEI3 = if priorEI2 != priorEI2 then priorEI2 else priorEI3;
#Fibonacci Extensions
rec data = CompoundValue(1, if (EISave == priceh or EISave == pricel) then data + 1 else data, 0);
def datacount = (HighestAll(data) - data);
def numberextfibstoshow = 2;
rec cpo = if dir != dir then 0 else 1;
def showFibExtLines = no;
def showtodayonly = no;
def today = if showtodayonly == yes then GetDay() == GetLastDay() else GetDay();
def extfib1 = if EISave == priceh then priceh - AbsValue(priorEI2 - priorEI1) * 1
else extfib1;
def extfib100 = if datacount <= numberextfibstoshow and today and showFibExtLines and !IsNaN(extfib1) and dir < 0 and cpo != 0 then extfib1 else Double.NaN;

def extfib1a = if EISave == priceh then priceh - AbsValue(priorEI2 - priorEI1) * 0.382
else extfib1a;
def extfib382 = if datacount <= numberextfibstoshow and today and showFibExtLines and !IsNaN(extfib1a) and dir < 0 and cpo != 0 then extfib1a else Double.NaN;

def extfib2 = if EISave == priceh then priceh - AbsValue(priorEI2 - priorEI1) *
0.618 else extfib2;
def extfib618 = if datacount <= numberextfibstoshow and today and showFibExtLines and !IsNaN(extfib2) and dir < 0 and cpo != 0 then extfib2 else Double.NaN;

def extfib3 = if EISave == priceh then priceh - AbsValue(priorEI2 - priorEI1) *
1.618 else extfib3;
def extfib1618 = if datacount <= numberextfibstoshow and today and showFibExtLines and !IsNaN(extfib3) and dir < 0 and cpo != 0 then extfib3 else Double.NaN;

def extfib3a = if EISave == priceh then priceh - AbsValue(priorEI2 - priorEI1) *
2.000 else extfib3a;
def extfib2000 = if datacount <= numberextfibstoshow and today and showFibExtLines and !IsNaN(extfib3a) and dir < 0 and cpo != 0 then extfib3a else Double.NaN;

def extfib4 = if EISave == priceh then priceh - AbsValue(priorEI2 - priorEI1) *
2.618 else extfib4;
def extfib2618 = if datacount <= numberextfibstoshow and today and showFibExtLines and !IsNaN(extfib4) and dir < 0 and cpo != 0 then extfib4 else Double.NaN;

def extfib5 = if EISave == priceh then priceh - AbsValue(priorEI2 - priorEI1) *
3.618 else extfib5;
def extfib3618 = if datacount <= numberextfibstoshow and today and showFibExtLines and !IsNaN(extfib5) and dir < 0 and cpo != 0 then extfib5 else Double.NaN;

def extfib1_ = if EISave == pricel then pricel + AbsValue(priorEI2 - priorEI1) * 1
else extfib1_;
def extfib100_ = if datacount <= numberextfibstoshow and today and showFibExtLines and !IsNaN(extfib1_) and dir > 0 and cpo != 0 then extfib1_ else Double.NaN;

def extfib1a_ = if EISave == pricel then pricel + AbsValue(priorEI2 - priorEI1) * 0.382
else extfib1a_;
def extfib382_ = if datacount <= numberextfibstoshow and today and showFibExtLines and !IsNaN(extfib1a_) and dir > 0 and cpo != 0 then extfib1a_ else Double.NaN;

def extfib2_ = if EISave == pricel then pricel + AbsValue(priorEI2 - priorEI1) *
0.618 else extfib2_;
def extfib618_ = if datacount <= numberextfibstoshow and today and showFibExtLines and !IsNaN(extfib2_) and dir > 0 and cpo != 0 then extfib2_ else Double.NaN;

def extfib3_ = if EISave == pricel then pricel + AbsValue(priorEI2 - priorEI1) *
1.618 else extfib3_;
def extfib1618_ = if datacount <= numberextfibstoshow and today and showFibExtLines and !IsNaN(extfib3_) and dir > 0 and cpo != 0 then extfib3_ else Double.NaN;

def extfib3a_ = if EISave == pricel then pricel + AbsValue(priorEI2 - priorEI1) *
2.000 else extfib3a_;
def extfib2000_ = if datacount <= numberextfibstoshow and today and showFibExtLines and !IsNaN(extfib3a_) and dir > 0 and cpo != 0 then extfib3a_ else Double.NaN;

def extfib4_ = if EISave == pricel then pricel + AbsValue(priorEI2 - priorEI1) *
2.618 else extfib4_;
def extfib2618_ = if datacount <= numberextfibstoshow and today and showFibExtLines and !IsNaN(extfib4_) and dir > 0 and cpo != 0 then extfib4_ else Double.NaN;

def extfib5_ = if EISave == pricel then pricel + AbsValue(priorEI2 - priorEI1) *
3.618 else extfib5_;
def extfib3618_ = if datacount <= numberextfibstoshow and today and showFibExtLines and !IsNaN(extfib5_) and dir > 0 and cpo != 0 then extfib5_ else Double.NaN;

def fibextbubblespacesinexpansion = 8;
def b = fibextbubblespacesinexpansion;
def direction = if !isUp then 1 else 0;
AddChartBubble( direction == 1 and showFibExtLines and !IsNaN(close) and IsNaN(close), extfib1, "100%", Color.RED, no);
AddChartBubble( direction == 1 and showFibExtLines and !IsNaN(close) and IsNaN(close), extfib1a, "38.2%", Color.RED, no);
AddChartBubble( direction == 1 and showFibExtLines and !IsNaN(close) and IsNaN(close), extfib2, "61.8%", Color.RED, no);
AddChartBubble( direction == 1 and showFibExtLines and !IsNaN(close) and IsNaN(close), extfib3, "161.8%", Color.RED, no);
AddChartBubble( direction == 1 and showFibExtLines and !IsNaN(close) and IsNaN(close), extfib3a, "200%", Color.RED, no);
AddChartBubble( direction == 1 and showFibExtLines and !IsNaN(close) and IsNaN(close), extfib4, "261.8%", Color.RED, no);
AddChartBubble( direction == 1 and showFibExtLines and !IsNaN(close) and IsNaN(close), extfib5, "361.8%", Color.RED, no);
AddChartBubble( direction == 0 and showFibExtLines and !IsNaN(close) and IsNaN(close), extfib1_, "100%", Color.GREEN, yes);
AddChartBubble( direction == 0 and showFibExtLines and !IsNaN(close) and IsNaN(close), extfib1a_, "38.2%", Color.GREEN, yes);
AddChartBubble( direction == 0 and showFibExtLines and !IsNaN(close) and IsNaN(close), extfib2_, "61.8%", Color.GREEN, yes);
AddChartBubble( direction == 0 and showFibExtLines and !IsNaN(close) and IsNaN(close), extfib3_, "161.8%", Color.GREEN, yes);
AddChartBubble( direction == 0 and showFibExtLines and !IsNaN(close) and IsNaN(close), extfib3a_, "200%", Color.GREEN, yes);
AddChartBubble( direction == 0 and showFibExtLines and !IsNaN(close) and IsNaN(close), extfib4_, "261.8%", Color.GREEN, yes);
AddChartBubble( direction == 0 and showFibExtLines and !IsNaN(close) and IsNaN(close), extfib5_, "361.8%", Color.GREEN, yes);
#Volume at Reversals
def vol = if BarNumber() == 0 then 0 else volume + vol;
def vol1 = if BarNumber() == 1 then volume else vol1;
def xxvol = if EISave == priceh or EISave == pricel then TotalSum(volume) else xxvol;
def chgvol = if xxvol - xxvol + vol1 == vol then vol else xxvol - xxvol;
def showBubblesVolume = no;
AddChartBubble(showBubblesVolume and !IsNaN(EI) and BarNumber() != 1, if isUp then priceh * (1 + bubbleoffset) else pricel * (1 - bubbleoffset), chgvol, if isUp and chghigh > 0 then Color.GREEN else if isUp and chghigh < 0 then Color.RED else if isUp then Color.YELLOW else if !isUp and chglow > 0 then Color.GREEN else if !isUp and chglow < 0 then Color.RED else Color.YELLOW, if isUp then yes else no );

input usemanualfibskip = no;#Hint usemanualfibskip: Select no to use preprogrammed fibskip amounts. Select no, to use the amount entered at input fibskip.
input fibskip = .50;#Hint fibskip: Set input usemanualfibskip == yes to use this amount versus preprogrammed amounts. Standard is 1.0. This is percentage difference between fib high and low before a new fib grid created.
def showBubblesfibratio = no;
def showFibLabel = no;#Hint showfibLabel: Select yes to show label of current fib level as of last price
def showfiblines = no;
def fib1level = .236;
def fib2level = .382;
def fibMlevel = .500;
def fib3level = .618;
def fib4level = .786;
#Fibs
def datacount2 = (HighestAll(data1) - data1);
def numberfibretracementstoshow = 2;
def fibskipit = if usemanualfibskip == no then if close > 800 then .25 else .5 else fibskip;
def EIfibh = if EISave == priceh and AbsValue(EISave - EISave) > priceh * fibskipit * .01 then priceh else EIfibh;
def EIfibl = if EISave == pricel and AbsValue(EISave - EISave) > priceh * fibskipit * .01 then pricel else EIfibl;
def range = EIfibh - EIfibl;
def fibH = if showfiblines == no then Double.NaN else if datacount2 <= numberfibretracementstoshow then EIfibh else Double.NaN;
def fibL = if showfiblines == no then Double.NaN else if datacount2 <= numberfibretracementstoshow then EIfibl else Double.NaN;
def fibM = if showfiblines == no then Double.NaN else if datacount2 <= numberfibretracementstoshow then EIfibl + range * fibMlevel else Double.NaN;
def fib1 = if showfiblines == no then Double.NaN else if datacount2 <= numberfibretracementstoshow then EIfibl + range * fib1level else Double.NaN;
def fib2 = if showfiblines == no then Double.NaN else if datacount2 <= numberfibretracementstoshow then EIfibl + range * fib2level else Double.NaN;
def fib3 = if showfiblines == no then Double.NaN else if datacount2 <= numberfibretracementstoshow then EIfibl + range * fib3level else Double.NaN;
def fib4 = if showfiblines == no then Double.NaN else if datacount2 <= numberfibretracementstoshow then EIfibl + range * fib4level else Double.NaN;

AddLabel(showFibLabel, Concat( "Current Fib Level ", AsPercent((close - EIfibl) / (range))), if close > EIfibl then Color.GREEN else if EIfibh == close then Color.WHITE else Color.RED);

AddChartBubble(showBubblesfibratio and !IsNaN(EI) and BarNumber() != 1, if isUp then priceh * (1 + bubbleoffset) else pricel * (1 - bubbleoffset) , if isUp then AsPercent((priceh - EIfibl) / (range)) else AsPercent((pricel - EIfibl) / range), if isUp and chghigh > 0 then Color.GREEN else if isUp and chghigh < 0 then Color.RED else if isUp then Color.GREEN else if !isUp and chglow > 0 then Color.GREEN else if !isUp and chglow < 0 then Color.RED else Color.RED, isUp);


Option 發表於 22-9-28 20:00

台灣同時會thinkscript和powerlanguage的人幾乎沒有吧..

qingxinguayu 發表於 22-9-29 22:14

Option 發表於 22-9-28 20:00
台灣同時會thinkscript和powerlanguage的人幾乎沒有吧..

謝謝親的提醒,估計是不多,不同語言的腳本轉換確實是很麻煩的事情。

stonehung 發表於 23-7-24 15:46

謝謝分享
頁: [1]
查看完整版本: 這個很神奇的趨勢轉折程式碼,有愿意帮忙轉換成mc的嗎?