常用的語法匯總

By | 2021-07-07

我把常用的一些語法匯總在這裡給大家參考,這樣大家就可以直接取用,不用再自己另外撰寫

 

開盤暴量

input:P1(1000,"暴量張數定義");
if barfreq <> "Tick" then RaiseRuntimeError("請設定頻率為TICK");
variable:BarNumberOfToday(0); 
if Date <> Date[1] then BarNumberOfToday=1 
else BarNumberOfToday+=1;{記錄今天的Bar數}

if currenttime < 090500 and date =currentdate {必需在9:05以前發生}
then begin {計算拉升時總張數}
variable: HighBar(NthHighestBar(1,Close,BarNumberOfToday)); {找到出現最高價那根Bar}
variable:idx(BarNumberOfToday-1),PullVolume(0),DropVolume(0); 
for idx = BarNumberOfToday-1 to HighBar 
{從開盤那個Bar,拉升到最高點那個Bar,上漲過程累計量}
begin
PullVolume += volume[idx]; {拉升的量}
end;
if PullVolume > P1 then ret=1;
end;

 

暴量剛起漲

input: Length(20); setinputname(1,"計算期數");
input: VLength(10); setinputname(2,"均量期數");
input: volpercent(50); setinputname(3,"爆量增幅%");
input: Rate(5); setinputname(4,"離低點幅度%");

settotalbar(3);
setbarback(maxlist(Length,VLength));

if Close > Close[1] and
Volume >= average(volume,VLength) *(1+ volpercent/100) and
Close <= lowest(close,Length) * (1+Rate/100)
then ret=1;

 

分鐘量暴量N%

input:percent(100); setinputname(1,"量增比例%");
input:Length(200); setinputname(2,"均量期數");
input:XLimit(True); setinputname(3,"限制最低觸發門檻");
input:atVolume(500); setinputname(4,"最低觸發張數");
input:TXT("建議使用分鐘線"); setinputname(5,"使用說明");

variable: AvgVolume(0);

settotalbar(Length + 3);

AvgVolume=Average(volume,Length);
if XLimit then 
begin
if Volume > atVolume and volume > AvgVolume *(1+ percent/100) then ret=1;
end
else
begin
if Volume > Volume[1] and volume > AvgVolume *(1+ percent/100) then ret=1;
end;


暴量脫離長期盤整區

以下腳本程式碼其中有一個 estvolume 自訂函數,在連結的文章中有做介紹,請注意要新增並編譯完成 estvolume 函數腳本後,才能取用此函數到其他腳本中。

input: VLength(20,"均量期數");
input: volpercent(60,"爆量增幅%");
input: r1(5,"區間高低差%");
input: period(30,"盤整最小期數");

if Close crosses above highest(high[1],period)//股價突破盤整區間
and
estvolume > average(volume,VLength) *(1+ volpercent/100)//暴量
and
highest(high,period)<=lowest(low,period)*(1+r1/100)//先前區間盤整
then ret=1;

箱型整理突破

 

input:period(40,"計算區間");
value1=highest(close[1],period);
value2=lowest(close[1],period);
if value1<value2*1.05
and close>close[2]*1.006
and close crosses over value1
and volume>average(volume[1],20)*1.3
then ret=1;

 

波動範圍變大

value1=truerange;
value2=highest(value1,20);
if value1>value2[1]
and value1>value1[1]
and close*1.01>high
and close>close[1]
and volume>1000
then ret=1;

 

底部愈墊愈高且資金流入

input:r1(7); setinputname(1,"近來漲幅上限%");

SetTotalBar(8);

value1 = RateOfChange(close, 12);
value2 = lowest(low,3);
value3 = lowest(low,8);
value4 = lowest(low,13);

condition1=false;
condition2=false;

if 
value1 < r1 and
value2 > value3 and 
value3 > value4 and
close = highest(close,13)
then 
condition1=true;

Value5=average(GetField("資金流向")[1],13);

if linearregslope(Value5,5) > 0
then condition2=true;

if condition1 and condition2
then ret=1;

 

股價突破布林值上緣

input:length(20,"布林值計算天數");
variable:up1(0),down1(0),mid1(0),bbandwidth(0);
up1 = bollingerband(Close, Length, 2); 
//以上是計算布林值的上軌值
input: day(9, "日KD期間");
variable:rsv_d(0),kk_d(0),dd_d(0);
stochastic(day, 3, 3, rsv_d, kk_d, dd_d);
//以上是計算KD值

if kk_d >=80
//KD鈍化
and close crosses over up1
then ret=1;

 

突破下降趨勢線

在新增「突破下降趨勢線」腳本前,請大家記得要先新增 angleprice 自訂函數,此自訂函數的腳本程式碼如下:

input:Date1(numeric),ang(numeric);
variable:Date1Price(0);
Date1Price =Open[Date1];
value1=tan(ang);
value2=date1price*(1+value1*date1/100);
angleprice=value2;

新增並編譯完成 angleprice 自訂函數後,即可撰寫「突破下降趨勢線」的腳本:

setbackbar(60);
variable:keyprice(0);
value1=highestbar(high,20);
value2=swinghighbar(close,20,2,2,2);
if value2<>-1 then begin
value3=angle(date[value1],date[value2]);
keyprice=angleprice(value1,value3);
if value1>value2 
and trueall(close >keyprice,3)
and close>keyprice*1.05
and close[40]*1.1<highest(high,20)
then ret=1;
end;

有大買單

input: BigBuy(500); setinputname(1,"大戶買單(萬)");
input: BigBuyTimes(10); setinputname(2,"大戶買進次數");
input:TXT("須逐筆洗價"); setinputname(3,"使用限制:");

variable: intrabarpersist Xtime(0);//計數器
variable: intrabarpersist Volumestamp(0);

Volumestamp =q_DailyVolume;

if Date <> currentdate or Volumestamp = Volumestamp[1] then Xtime =0; //開盤那根要歸0次數

if q_tickvolume*q_Last > BigBuy*10 and q_BidAskFlag=1 then Xtime+=1; //量夠大就加1次

if Xtime > BigBuyTimes then ret=1;

 

價量背離後跌破

input:Length(5, "計算期數");
input:times(3, "價量背離次數");
input:Dist(20, "距離");

variable:count(0),KPrice(0),hDate(0);

count = CountIf(close > close[1] and volume < volume[1], Length);

if count > times then begin
hDate=Date;
Kprice = lowest(l,length);
end;


Condition1 = Close crosses below Kprice;
Condition2 = DateDiff(Date,hdate) < Dist;
Ret = Condition1 And Condition2;

 

回檔後籌碼收集

condition1=false;
value1=GetField("分公司買進家數")[1];
value2=GetField("分公司賣出家數")[1];
value3=value2-value1;
value4=countif(value3>20,10);
value5=GetField("投信買張")[1];
value6=summation(value5,5);
if countif(value6>=1000,60)>=1
then condition1=true;
//過去60個交易日投信曾五天買超過2000張
if value4>=6
//最近十天有六天以上,籌碼是收集的
and close[30]>close*1.1
//最近三十天跌超過一成
and condition1
then ret=1;

 

突破外資成本線

Input: period(20, "期間(天)");

variable: avg_b(0);
value3=GetField("成交金額")/(GetField("Volume")*1000);
//當日均價
if GetField("Volume") > 0 then 
Value5 = GetField("外資買張")*value3
//外資買進金額
else 
Value5 = 0;
Value1 = summation(Value5, period);
Value2 = summation(GetField("外資買張"), period);
if Value2 > 0 then avg_b = Value1 / Value2;
if close crosses over avg_b then ret=1;

內外盤力道空翻多

variable:IORatio(0),z(1);
if GetField("內盤量")[z]<>0 then 
IORatio=GetField("外盤量")[z]/GetField("內盤量")[z]-1
{每天的內外盤力道比例}
else
ioratio=ioratio[1];


variable:iHigh(0),iLow(10000);

if IORatio > 0.5 then 
begin
iHigh = H;
end
else if IORatio < -0.5 then 
begin
iLow = L;
end;


if iHigh crosses over iLow then ret=1;

 

開盤委買暴增

input:length(5);
value1=GetField("開盤委買");

value5=average(value1,100);

if 
value1>4*value5
and value1>200
and close<close[10]
then ret=1;