[TOC]
Bahasa My adalah bahasa transaksi pemrograman yang kompatibel dan ditingkatkan untuk bahasa Mac. Bahasa My yang dikuantifikasi FMZ akan melakukan pemeriksaan gramatikal yang ketat, misalnya ketika menggunakan penguatan bahasa untuk menyematkan kode bahasa JavaScript, di%%
Operator yang diikuti oleh lebih dari satu karakter kosong akan menyebabkan kesalahan.
Kontrak mata uang digital
Kontrak mata uang digital
this_week 数字货币期货当周合约
next_week 数字货币期货次周合约
month 数字货币期货月度合约
quarter 数字货币期货季度合约
next_quarter 数字货币期货次季度合约
third_quarter 数字货币期货第三季度合约
last_quarter 最后季度合约
XBTUSD BITMEX永续合约
swap 除BITMEX交易所以外数字货币期货永续合约
具体可以参看JavaScript/Python/C++文档的exchange.SetContractType()函数部分
Variabel adalah bagian dari memori komputer yang digunakan untuk menyimpan data.
Membuka variabel pertama
// 将1赋值给变量a
a:=1;
ada麦语言
Dari, dari数据量
Perbedaan sederhana:
0
、1
、’abc’
。Close
(Harga Akhir)Close
Termasukn
Penutupan harga per siklus[ 10.1 , 10.2 , 10.3 , 10.4 , 10. 5 ...]
Dibedakan dari tipe variabel keton
''
Paket, jenis string tidak diizinkan untuk digunakan secara langsung, perlu untuk mengekspor fungsi ke dalam tampilan.INFO(CLSOE>OPEN,'OK!');
// 整数
int:=2;
// 小数
float:=3.1;
A:=1>0;
Setelah kode ini dieksekusi,A
Jadi nilai 1 ≠ 1.// 当前周期收盘价大于-999,你会发现,每个周期的返回值都是1,代表true,因为收盘价几乎不可能为负数
is_true:=Close>-999;
VARIABLE:VALUE1:10; // 声明一个全局变量,赋值为10,只执行一次。
Perhatikan hal-hal berikut:
VARIABLE:NX:0; // 初始一个全局变量NX为0
NX..NX+1; // 每次累加1
INFO(1,NX); // 每次打印NX
AwalnyaINFO
Kata-kata yang tercetak adalah101
Mungkin ada keraguan bahwa awalnya tidak0
Bagaimana?
Alasannya adalah bahwa pada saat pengukuran ulang, garis K awal adalah 100 dan telah berjalan di atas 100 garis K, ditambah 100 kali.
Disket tergantung pada jumlah K-line yang didapatkan.
Dalam sebagian besar sistem, penamaan variabel tidak diizinkan menggunakan kotak sistem untuk menyimpan kata-kata ((nama variabel internal, nama fungsi).Close
、C
。 Selain itu, tidak diizinkan angka murni atau angka awal. Tidak diizinkan akhir yang panjang, batasan panjang berbeda untuk sistem yang berbeda.
Sebenarnya Anda tidak perlu khawatir dengan efisiensi penguraian bahasa Cina dari sistem utama, percayalah bahwa bahasa Mandarin sangat ramah terhadap bahasa Cina. Banyak pengemudi lama dari kode Mandarin merekomendasikan Anda menggunakan dua spesifikasi penamaan berikut:
1. Nama Tionghoa
// 优雅的输出
五日均线:=MA(C,5);
2. Bahasa Inggris + Garis bawah
// 输出
move_avg_5:=MA(C,5);
Jika Anda lebih suka bahasa Inggris, cobalah untuk membuat varian Anda lebih mudah dimengerti.A1
,AAA
,BBB
…nama-nama seperti itu. Percayalah, ketika Anda memeriksa kode indikator Anda lagi beberapa hari kemudian, Anda akan sangat menderita karena kehilangan ingatan. Begitu juga ketika Anda mengekspor kode Anda kepada orang lain, pembaca pasti akan hancur.
Jadi mulai dari sekarang, dengan penuh kasih sayang, aku berharap kamu bisa memeluk bahasa Jawa. Semoga bisa menjadi alat yang ampuh untuk analisis dan pengambilan keputusan.
Tipe data adalah konsep dasar, dalam pengkodean ketika kita memberikan nilai data yang jelas ke variabel, maka variabel tersebut menjadi tipe dari data itu sendiri.
1、2、3、1.1234、2.23456 ...
'1' 、'2' 、'3' ,字符串类型必须用 '' 包裹
一系列单值数据构成的数据集合
digunakan1
Perwakilantrue
,0
Perwakilanfalse
。
Contoh
// 声明一个数值类型的变量
var_int := 1;
// 声明一个序列数据的变量
var_arr := Close;
// 字符串类型不能单独声明,需要结合函数
INFO(C>O, '阳线');
Untuk melakukan operasi, perhitungan dari kode indikator, atau secara sederhana adalah simbol yang berpartisipasi dalam operasi.
Untuk memberikan nilai pada suatu variabel
- 1. `:`
`:`, mewakili penugasan dan output ke dalam diagram (sub-grafik).
```
Close1:Close; // 将Close赋值给变量Close1,并且输出到图中
```
- 2. `:=`
`:=`, mewakili nilai yang diberikan, tetapi tidak diekspor ke grafik (grafik utama, subgrafik ...) dan tidak ditampilkan dalam tabel status.
```
Close2:=Close; // 将Close赋值给变量Close2
```
- 3. `^^`
`^^`Dua, dua.`^`Simbol-simbol tersebut mewakili asumsi, memberikan asumsi pada variabel dan mengekspornya ke dalam grafik (gambar utama).
```
lastPrice^^C;
```
- 4. `..`
`..`Dua, dua.`.`Simbol-simbol mewakili penugasan, memberi penugasan pada variabel dan menampilkan nama dan nilai variabel dalam grafik, tetapi tidak menggambarnya ke dalam grafik (gambar utama, sub-gambar, dll.).
```
openPrice..O
```
Operator relasional adalah operator biner yang digunakan dalam ekspresi kondisional. Operator relasional digunakan untuk menentukan hubungan antara dua data.
Mengembalikan nilai: tipe Boolean, bukantrue
1.false
(0)。
- 1. Lebih dari`>`
```
// 将2>1的运算结果赋值给rv1变量,此时rv1=1
rv1:=2>1;
```
- 2. Kurang dari`<`
```
// 返回false,也就是0,因为2大于1
rv3:=2<1;
```
- 3. Lebih besar dari sama dengan`>=`
```
x:=Close;
// 将收盘价大于等于10的运算的结果赋值给变量rv2
// 注意,由于close是一个序列数据,当进行close>=10运算的时候,本质是每个周期都进行运算,所以每个周期都会有一个1、0的返回值
rv2:=Close>=10;
```
- 4. Kurang dari sama dengan`<=`
```
此处省略
```
- 5. setara`=`
```
A:=O=C; // 判断开盘价是不是等于收盘价。
```
- 6. Tidak sama dengan`<>`
```
1<>2 // 判断1是否不等于2,返回值为1(true)
```
Mengembalikan nilai: tipe Boolean, bukantrue
1.false
(0)。
1. Logika dan`&&`, dapat digunakan`and`Alternatifnya, kedua sisi yang terhubung harus dibentuk secara bersamaan.
// 判断 cond_a,cond_b,cond_c 是否同时成立
cond_a:=2>1;
cond_b:=4>3;
cond_c:=6>5;
cond_a && cond_b and cond_c; // 返回值为1,成立
2. Logika atau`||`, dapat digunakan`or`Alih-alih atau link di kedua sisi, satu sisi dibentuk ((true), dan secara keseluruhan dibentuk ((return value true))
cond_a:=1>2;
cond_b:=4>3;
cond_c:=5>6;
cond_a || cond_b or cond_c; // 返回值为1,成立
3. `()`Operator, pertama kali menghitung ekspresi dalam tanda kurung.
1>2 AND (2>3 OR 3<5) // 运算结果为假
1>2 AND 2>3 OR 3<5 // 运算结果为真
返回值:数值类型
Operator aritmatika adalah simbol untuk menyelesaikan operasi aritmatika dasar, yaitu simbol yang digunakan untuk menangani empat operasi.
- **Tambahkan +**
```
A:=1+1; // 返回 2
```
- **Pengurangan -**
```
A:=2-1; // 返回 1
```
- **Perkalian***
```
A:=2*2; // 返回 4
```
- **Kecuali**
```
A:=4/2; // 返回 2
```
Dalam dunia pemrograman, fungsi-fungsi yang diimplementasikan adalah bagian dari kode yang mengimplementasikan suatu fungsi tertentu. Dan dapat digunakan untuk panggilan kode lainnya, bentuk umumnya adalah sebagai berikut:
function(param1,param2,...)
- Terdiri dari:
Nama fungsi ((Argumen 1, Argumen 2, ...), mungkin tidak ada argumen atau memiliki beberapa argumen. Misalnya`MA(x,n);`Wakil kembali`n`Dalam siklus`x`rata-rata bergerak sederhana.`MA()`Jadi saya akan menuliskannya sebagai sebuah fungsi.`x`Dan`n`adalah argumen dari fungsi.
Ketika kita menggunakan fungsi, kita perlu memahami definisi dasar fungsi, yaitu apa yang dapat diperoleh dengan memanggil fungsi tersebut. Biasanya fungsi memiliki parameter, dan ketika kita mengimpor parameter, kita perlu memastikan bahwa jenis data yang dikirim sesuai.`MA(x,n);`Dia menjelaskan:
```
返回简单移动平均
用法:
AVG:=MA(X,N): X的N日简单移动平均,算法(X1+X2+X3+...+Xn)/N,N支持变量
```
Ini sangat tidak ramah bagi pemula. Selanjutnya kita melakukan analisis fungsi secara menyeluruh, mencoba mencari cara untuk belajar dan menggunakan fungsi dengan cepat.
Untuk mempelajari fungsi dengan cepat, pertama-tama kita perlu memahami sebuah konsep.KembaliJika nilai berarti “nilai tertentu”, maka nilai yang dikembalikan berarti: data yang dapat diperoleh.
// 因为后面的代码中会用到,所以用变量 return_value 接收、保存 function()的返回值
// retrun_value := function(param1,param2);
// 例如:
AVG:=MA(C,10); // AVG即retrun_value,function函数即:MA函数,param1参数:C即收盘价序列数据,param2参数:10。
Konsep penting kedua dari fungsi sekunder adalah parameter, yang dapat ditransmisikan ke parameter yang berbeda untuk mendapatkan nilai yang berbeda.
// 变量ma5接收5日收盘价移动平均值
ma5:=MA(C,5);
// 变量ma10接收10日收盘价移动平均值
ma10:=MA(C,10);
Variabel di atasma5
、ma10
Parameter pertamaX
KeduanyaC
(Harga Akhir)C
Fungsi ini juga dapat dihitung sebagai suatu fungsi (((yang mengembalikan urutan harga dari bukaan sampai saat ini), hanya saja ia tidak memiliki parameter. Parameter kedua adalah 5,10 yang digunakan untuk menunjukkanMA()
Fungsi, kita akan mendapatkan moving average dari beberapa hari harga close, dengan parameter, fungsi menjadi lebih fleksibel dalam penggunaannya.
MA(x,n)
Jika Anda tidak tahu parameter,x
、n
Jadi, jika kita menggunakan tipe data yang sama, maka kita tidak bisa mendapatkan nilai yang benar.Fungsi-fungsi yang diuraikan di bawah ini, digunakan dengan mengikuti 3 prinsip di atas.
麦语言
DanJavaScript
Pemrograman campuran bahasa %%
// 这里面可以调用发明者量化的任何API
scope.TEST = function(obj) {
return obj.val * 100;
}
%%
收盘价:C;
收盘价放大100倍:TEST(C);
上一个收盘价放大100倍:TEST(REF(C, 1)); // 鼠标移动到回测的K线上就会提示变量值
- `scope`Objek
`scope`Objek dapat menambahkan atribut dan memberi nilai fungsi anonim pada atribut, dan bagian dari kode bahasa Mac dapat memanggil fungsi anonim yang merujuk atribut tersebut.
- `scope.getRefs(obj)`fungsi
ada`JavaScript`Di blok kode, panggilan`scope.getRefs(obj)`Fungsi yang dikembalikan`obj`Data objek
Berikutnya`%% %%`Terbungkus dengan simbol`JavaScript`Kode akan mendapatkan ke dalam kode bahasa Mac`TEST(C)`Fungsi yang dihubungkan pada panggilan`C`Harga penutupan.
`scope.getRefs`Fungsi ini akan mengembalikan semua nilai tutup dari data K-line ini.`throw "stop"`Interupsi. Jadi variabel`arr`Hanya berisi harga penutupan Bar pertama.`throw "stop"`Akan dilakukan.`JavaScript`Kode terakhir`return`, mengembalikan semua data harga.
```
%%
scope.TEST = function(obj){
var arr = scope.getRefs(obj)
Log("arr:", arr)
throw "stop"
return
}
%%
TEST(C);
```
- scope.bars
ada`JavaScript`Akses ke semua baris K dalam blok kode.
`TEST`Fungsi ini akan mengembalikan suatu nilai. 1 adalah garis negatif, 0 adalah garis positif.
```
%%
scope.TEST = function(){
var bars = scope.bars
return bars[bars.length - 1].Open > bars[bars.length - 1].Close ? 1 : 0 // 只能返回数值
}
%%
arr:TEST;
```
```
# 注意:
# TEST接收的匿名函数,返回值必须是数值。
# 如果匿名函数没有参数,在调用TEST的时候直接写VAR:=TEST;写VAR:=TEST();会报错。
# scope.TEST中的TEST必须是大写。
```
- scope.bar
ada`JavaScript`Di dalam blok kode, buka bar yang ada sekarang.
Perhitungan rata-rata harga tinggi dan rendah.
```
%%
scope.TEST = function(){
var bar = scope.bar
var ret = (bar.Open + bar.Close + bar.High + bar.Low) / 4
return ret
}
%%
avg^^TEST;
```
- scope.depth
Akses ke data kedalaman pasar ((Order thin) <unk>
```
%%
scope.TEST = function(){
Log(scope.depth)
throw "stop" // 打印一次深度数据后就抛出异常,暂停
}
%%
TEST;
```
- scope.symbol
Dapatkan string nama pasangan transaksi saat ini.
```
%%
scope.TEST = function(){
Log(scope.symbol)
throw "stop"
}
%%
TEST;
```
- scope.barPos
Dapatkan posisi Bar pada garis K.
```
%%
scope.TEST = function(){
Log(scope.barPos)
throw "stop"
}
%%
TEST;
```
- scope.get_locals('name')
Fungsi ini digunakan untuk mendapatkan variabel dalam bagian kode bahasa Mac.
```
V:10;
%%
scope.TEST = function(obj){
return scope.get_locals('V')
}
%%
GET_V:TEST(C);
```
```
# 注意:
# 如果某个变量,由于周期不足的时候计算不出数据,这个时候在JavaScript代码中调用scope.get_locals函数
# 获取这个变量时,会报错:line:XX - undefined locals某个变量名undefined
```
- scope.canTrade
`canTrade`Apakah atribut ditandai saat ini dapat diperdagangkan (apakah Bar saat ini adalah akar terakhir)
Sebagai contoh, untuk menentukan kapan strategi berada dalam kondisi yang dapat diperdagangkan untuk melakukan order dan mencetak data situasi
```
%%
scope.LOGTICKER = function() {
if(exchange.IO("status") && scope.canTrade){
var ticker = exchange.GetTicker();
if(ticker){
Log("ticker:", ticker);
return ticker.Last;
}
}
}
%%
LASTPRICE..LOGTICKER;
```
%%
scope.TEST = function(a){
if (a.val) {
throw "stop"
}
}
%%
O>C,BK;
C>O,SP;
TEST(ISLASTSP);
Setelah membuka dan menutup posisi, strategi berhenti.
Sistem akan secara otomatis memilih periodik K-line dasar yang sesuai, dan menggunakan data periodik K-line dasar ini untuk menyintesis semua data K-line yang dikutip, memastikan akurasi data.
#EXPORT 公式名 ... #END
Menciptakan sebuah rumus. Jika hanya untuk mendapatkan data dari periode yang berbeda tidak melakukan perhitungan rumus, bisa juga menulis rumus kosong.Rumus kosong adalah:
#EXPORT TEST
NOP;
#END // 结束
#IMPORT [MIN,周期,公式名] AS 变量值
Rumus referensi: Untuk mendapatkan berbagai data dari siklus yang telah ditetapkan (harga penutupan, harga pembukaan, dan lain-lain, diperoleh melalui nilai variabel).IMPORT
dalam perintahMIN
ArtinyaTingkat menit◦ Penemu dari platform kuantifikasi bahasa Mac,IMPORT
Perintah hanya mendukungMIN
Tingkat ◦ Sekarang mendukung siklus non-standar, misalnya dapat digunakan#IMPORT [MIN,240,TEST] AS VAR240
Mengimpor data seperti K-line dengan periode 240 menit (< 4 jam)
Contoh kode:
// 本代码演示如何引用不同周期的公式在同一代码里
// #EXPORT扩展语法,以#END结束标记为一个公式,可以声明多个
#EXPORT TEST
均值1:EMA(C, 20);
均值2:EMA(C, 10);
#END // 结束
#IMPORT [MIN,15,TEST] AS VAR15 // 引用公式,K线周期用15分钟
#IMPORT [MIN,30,TEST] AS VAR30 // 引用公式,K线周期用30分钟
CROSSUP(VAR15.均值1, VAR30.均值1),BPK;
CROSSDOWN(VAR15.均值2, VAR30.均值2),SPK;
十五分最高价:VAR15.HIGH;
三十分最高价:VAR30.HIGH;
AUTOFILTER;
REF
、LLV
、HHV
Perhatikan perintah yang merujuk data (*backtest
start: 2021-08-05 00:00:00
end: 2021-08-05 00:15:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_OKCoin","currency":"ETH_USD"}]
args: [["TradeAmount",100,126961],["ContractType","swap",126961]]
*)
%%
scope.PRINTTIME = function() {
var bars = scope.bars;
return _D(bars[bars.length - 1].Time);
}
%%
BARTIME:PRINTTIME;
#EXPORT TEST
REF1C:REF(C,1);
REF1L:REF(L,1);
#END // 结束
#IMPORT [MIN,5,TEST] AS MIN5
INFO(1, 'C:', C, 'MIN5.REF1C:', MIN5.REF1C, 'REF(MIN5.C, 1):', REF(MIN5.C, 1), '触发BAR时间:', BARTIME, '#FF0000');
INFO(1, 'L:', L, 'MIN5.REF1L:', MIN5.REF1L, 'REF(MIN5.L, 1):', REF(MIN5.L, 1), '触发BAR时间:', BARTIME, '#32CD32');
AUTOFILTER;
PerbandinganMIN5.REF1C
DanREF(MIN5.C, 1)
Perbedaannya dapat dilihat dari:
MIN5.REF1C
adalah nilai penutupan dari BAR ke-2 dari 5 menit K-line data saat ini.
REF(MIN5.C, 1)
adalah siklus K-line dari model saat ini ((Kode di atas telah diatur untuk 1 menit, yaituperiod: 1m
), saat ini saat kedua BAR di mana harga penutupan siklus 5 menit.
Kedua definisi ini berbeda dan dapat digunakan sesuai kebutuhan.
Dengan menuliskanAUTOFILTER
Fungsi untuk mengontrol dan mengimplementasikan filter sinyal yang terbuka, ketika ada beberapa sinyal terbuka yang memenuhi persyaratan, ambil sinyal pertama sebagai sinyal yang valid, dan sinyal yang sama pada baris k di belakang akan disaring.
Instruksi yang didukung oleh model filter: BK, BP, BPK, SK, SP, SPK, CLOSEOUT, tidak mendukung BK ((5) dan lainnya.
Misalnya:
MA1:MA(CLOSE,5);
MA2:MA(CLOSE,10);
CROSSUP(C,MA1),BK;
CROSSUP(MA1,MA2),BK;
C>BKPRICE+10||C<BKPRICE-5,SP;
AUTOFILTER;
理解:
如上范例,没有设置 AUTOFILTER 时,第三行BK 和第四行BK 第五行SP,依次触发,每根K线触发一次信号。开仓后,再到平仓,即重置模型状态。
如果设置 AUTOFILTER , 触发BK后,只能触发SP,其它的BK 信号被忽略,每根K线触发一次信号。
Tidak ada dalam modelAUTOFILTER
Fungsi, memungkinkan sinyal berturut-turut untuk membuka posisi atau sinyal berturut-turut untuk menutup posisi, dapat mewujudkan kenaikan posisi, penurunan posisi.
Instruksi yang didukung: BK (N), BP (N), SK (N), SP (N), CLOSEOUT (BPK (N), SPK (N), tidak mendukung instruksi pembukaan posisi tanpa angka. (1) Mendukung pengelompokan perintah. (2) Bila beberapa kondisi perintah terpenuhi pada saat yang sama, sinyal yang dieksekusi menurut urutan terdahulu yang ditulis dalam pernyataan kondisi. Misalnya:
MA1:MA(CLOSE,5);
MA2:MA(CLOSE,10);
CROSSUP(C,MA1),BK(1);
CROSSUP(MA1,MA2),BK(1);
C>BKPRICE+10||C<BKPRICE-5,SP(BKVOL);
menggunakanTRADE\_AGAIN
Anda bisa membuat satu perintah yang sama, menghasilkan beberapa sinyal berturut-turut.
理解:
以上例子,逐个信号执行,执行后的信号不再触发。平仓后重置模型状态。一个K线触发一次信号。
Tidak peduli apakah k line sudah habis, perhitungan sinyal akan dilakukan secara real time order, yaitu K line belum selesai order sebelumnya; K line di akhir revisi, jika arah memegang posisi dengan arah sinyal pada akhir k line tidak sesuai akan secara otomatis sinkronisasi memegang posisi.
Misalnya:
MA1:MA(CLOSE,5);
MA2:MA(CLOSE,10);
CROSSUP(MA1,MA2),BPK; // 5周期均线上穿10周期均线做多。
CROSSDOWN(MA1,MA2),SPK; // 5周期均线下穿10周期均线做空。
AUTOFILTER;
Model dengan menggunakanmultsig
Untuk mengontrol dan mewujudkan satu K yang menghasilkan beberapa sinyal.
Jika tidak ada, maka sinyal akan dihitung dan langsung di-order.
Sinyal tidak diperiksa, tidak ada sinyal hilang, arah sinyal selalu sesuai dengan arah memegang posisi.
Sebuah K-line dapat dilakukan berulang kali jika memenuhi beberapa kondisi sinyal.
例如:
MA1:MA(CLOSE,5);
MA2:MA(CLOSE,10);
CROSSUP(MA1,MA2),BK;
C>BKPRICE+10||C<BKPRICE-5,SP;
AUTOFILTER;
MULTSIG(0,0,2,0);
MULTSIG
Anda dapat mengeksekusi berbagai baris perintah dalam satu baris K.
Sebuah baris perintah hanya akan memberi sinyal sekali.
O<C,BK; // 这些条件在一个K线Bar内,可能都执行,但是每行只出一次信号
10+O<C,BK; // 策略加上TRADE_AGAIN(10);可以使每行出多次信号
20+O<C,BK;
40+O<C,BK;
MULTSIG(1,1,10);
Dia menambahkan:
1 , Model penambahan dan pengurangan, dua cara sinyal pada garis k: harga penutupan dan harga perintah, keduanya mendukung.
2. Model penambahan dan pengurangan gudang, juga mendukung satu k line dengan beberapa pesanan sinyal.
Model penambahan dan pengurangan, tulis di atasmultsig
Fungsi, untuk mencapai k baris beberapa kali naik, atau beberapa kali turun.
Model harga closeout adalah model yang dilakukan setelah BAR saat ini habis, dan transaksi dilakukan pada saat BAR yang lebih rendah dimulai.
Model harga real-time berarti setiap perubahan harga dilakukan satu kali, dan perdagangan dilakukan segera setelah sinyal. Model harga real-time mengabaikan sinyal hari sebelumnya ((sinyal hari sebelumnya dieksekusi langsung pada hari sebelumnya), model harga real-time hanya melihat data tren saat ini untuk menentukan apakah sinyal dipicu.
Menggunakan operator
^^
, Pada saat memberikan nilai pada variabel, indikator pengaturan ditampilkan pada grafik utama.
MA60^^MA(C, 60); // 计算参数为60的均线指标
Menggunakan operator:
, Pada saat memberikan nilai pada variabel, indikator pengaturan ditampilkan pada subgrafik.
ATR:MA(MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW)),26); // 给ATR变量赋值,":"符号后为计算ATR的公式
Jika Anda tidak ingin menampilkan pada gambar utama atau gambar kecil, gunakan operator “..“。
MA60..MA(C, 60); // 计算参数为60的均线指标
Dapat digunakanDOT
、COLORRED
Setting line type, color, dan lain-lain sesuai dengan kebiasaan pengguna yang akrab dengan bahasa Mac.
Memperkenalkan apa yang umum terjadi dalam proses pembuatan indikatorPertanyaan, yang biasanya perlu diperhatikan saat menulis.
Perhatikan tanda baca;
Akhirnya.
Perhatikan bahwa kata kunci sistem tidak dapat digunakan sebagai deklarasi variabel.
Perhatikan penggunaan stringSatu tanda kutip,Misalnya:'开仓'
String ini.
Pengamatan
- `// 注释内容`(Inggris: Input method), yang berarti bahwa kode tidak dikompilasi pada saat eksekusi, yang berarti tidak dijalankan`//`Konten di belakang, biasanya kita gunakan untuk menandai makna dari kode, untuk memudahkan kode revisi, dapat dengan cepat dipahami, diingat.
- `{ 注释内容 }`Komentar
```
A:=MA(C,10);
{上一行代码是计算均线。}
```
- `(* 注释内容 *)`Komentar
```
A:=MA(C,10);
(*上一行代码是计算均线。*)
```
Pada saat menulis kode, sering terjadi kesalahan simbol karena pengalihan bahasa Inggris dalam input. Beberapa yang umum adalah::
Akhir kata;
tanda koma,
Kandang()
Dan lain-lain, perhatikan karakter-karakter yang berbeda dalam bahasa Mandarin dan bahasa Inggris.
Jika Anda menggunakan Google+, Baidu, atau Bing, Anda bisa mengetikkan kata-kata dengan menekan tombol “Once”.
shift
Tombol, beralih cepat ke bahasa Inggris/Cina.
>=
。<=
。Dalam strategi berjangka, jika ada posisi yang dipegang secara manual sebelum robot strategi dimulai, maka saat robot dimulai, informasi mengenai posisi akan terdeteksi dan disinkronkan dengan status posisi yang sebenarnya.
Ini bisa digunakan dalam strategi.SP
, BP
,CLOSEOUT
Perintah untuk mundur.
%%
if (!scope.init) {
var ticker = exchange.GetTicker();
exchange.Buy(ticker.Sell+10, 1);
scope.init = true;
}
%%
C>0, CLOSEOUT;
Bahasa Mac tidak mendukung kontrak yang sama, tetapi memiliki banyak posisi kosong.
Harga pembukaan untuk mendapatkan K Line Graph.
Harga pembukaan
Fungsi: OPEN, disingkat O
Parameter: Tidak
Explanation: Kembali ke harga pembukaan “The Cycle”
Data berurutan
OPEN取得K线图的开盘价。
注:
1、可简写为O。
例1:
OO:=O; //定义OO为开盘价;注意O与0的区别。
例2:
NN:=BARSLAST(DATE<>REF(DATE,1));
OO:=REF(O,NN); //取的当日的开盘价
例3:
MA5:=MA(O,5); //定义开盘价的5周期均线(O为OPEN简写)。
Harga tertinggi untuk mendapatkan K Line Map.
Harga tertinggi
Fungsi: HIGH, disingkat H
Parameter: Tidak
Pengertian: Kembali ke harga tertinggi dalam siklus
Data berurutan
HIGH取得K线图的最高价。
注:
1、可简写为H。
例1:
HH:=H; // 定义HH为最高价
例2:
HH:=HHV(H,5); // 取的5个周期内最高价的最大值
例3:
REF(H,1); // 取的前一根K线的最高价
Harga minimum untuk mendapatkan K Line Map.
Harga Terendah
Fungsi: LOW, disingkat L
Parameter: Tidak
Penjelasan: Kembali ke harga terendah dalam siklus
Data berurutan
LOW取得K线图的最低价。
注:
1、可简写为L。
例1:
LL:=L; // 定义LL为最低价
例2:
LL:=LLV(L,5); // 取得5个周期内最低价的最小值
例3:
REF(L,1); // 取得前一根K线的最低价
Harga penutupan K Line Graph.
Harga penutupan
Fungsi: CLOSE, disingkat C
Parameter: Tidak
Explanation: Kembali ke harga akhir siklus
Data berurutan
CLOSE取得K线图的收盘价
注:
1、当盘中k线没有走完的时候,取得最新价。
2、可简写为C。
例1:
A:=CLOSE; //定义变量A为收盘价(盘中k线没有走完的时候A为最新价)
例2:
MA5:=MA(C,5); //定义收盘价的5周期均线(C为CLOSE简写)
例3:
A:=REF(C,1); //取得前一根k线的收盘价
Mendapatkan volume transaksi dari K line chart.
Jumlah transaksi
Fungsi: VOL, disingkat V
Parameter: Tidak
Explanation: Kembali ke volume transaksi “yang siklus”
Data berurutan
VOL取得K线图的成交量。
注:
可简写为V。
该函数在当根TICK上的返回值为当天所有TICK成交量的累计值。
例1:
VV:=V; // 定义VV为成交量
例2:
REF(V,1); // 表示前一个周期的成交量
例3:
V>=REF(V,1); // 成交量大于前一个周期的成交量,表示成交量增加(V为VOL的简写)
Jumlah total kepemilikan di pasar futures (kontrak) saat ini.
OpenInterest:OPI;
Referensi selanjutnya:
引用X在N个周期前的值。
注:
1、当N为有效值,但当前的k线数不足N根,返回空值;
2、N为0时返回当前X值;
3、N为空值时返回空值。
4、N可以为变量
例1:
REF(CLOSE,5);表示引用当前周期前第5个周期的收盘价
例2:
AA:=IFELSE(BARSBK>=1,REF(C,BARSBK),C);//取最近一次买开仓信号K线的收盘价
// 1)发出BK信号的当根k线BARSBK返回空值,则发出BK信号的当根k线REF(C,BARSBK)返回
空值;
// 2)发出BK信号的当根k线BARSBK返回空值,不满足BARSBK>=1,则当根k线的收盘价。
// 3)发出BK信号之后的k线BARSBK返回买开仓的K线距离当前K线的周期数,REF(C,BARSBK)
返回开仓k线的收盘价。
// 4)例:1、2、3 三根k线,1 K线为开仓信号的当根k线,则返回当根k线的收盘价,2、3
K线返回 1 K线的收盘价。
Unit transaksi yang mengambil kontrak data.
取数据合约的交易单位。
用法:
UNIT 取加载数据合约的交易单位。
Uang digital tunai
Nilai UNIT adalah 1.
Kontrak Berjangka Mata Uang Kripto
Nilai UNIT terkait dengan mata uang kontrak.
OKEX期货币本位合约:BTC合约1张代表100美元,其它币种的1张合约代表10美元
Minimum perubahan harga kontrak data.
取数据合约的最小变动价位。
用法:
MINPRICE; 取加载数据合约的最小变动价位。
Minimum perubahan harga dari kontrak perdagangan.
取交易合约的最小变动价位。
用法:
MINPRICE1; 取交易合约的最小变动价位。
Mengambil posisi garis K.
BARPOS,返回从第一根K线开始到当前的周期数。
注:
1、BARPOS返回本地已有的K线根数,从本机上存在的数据开始算起。
2、本机已有的第一根K线上返回值为1。
例1:LLV(L,BARPOS); // 求本地已有数据的最小值。
例2:IFELSE(BARPOS=1,H,0); // 当前K线是本机已有的第一根K线取最高值,否则取0。
DAYBARPOS sebagai akar K garis BAR adalah akar K garis BAR hari.
Periode adalah menit.
1, 3, 5, 15, 30, 60, 1440
TanggalFungsi DATE, mendapatkan tanggal dari tahun ke tahun dari periode tersebut sejak tahun 1900.
例1:
AA..DATE; // 测试时AA的值为220218,表示2022年2月18日
Waktu untuk mengambil garis K
TIME,取K线时间。
注:
1、该函数在盘中实时返回,在K线走完后返回K线的起始时间。
2、该函数返回的是交易所数据接收时间,也就是交易所时间。
3、TIME函数在秒周期使用时返回六位数的形式,即:HHMMSS,在其他周期上显示为四位数的形式,即:HHMM.
4、TIME函数只能加载在日周期以下的周期中,在日周期及日周期以上的周期中该函数返回值始终为1500。
5、使用TIME函数进行尾盘平仓的操作需要注意
(1)尾盘平仓设置的时间建议设置为K线返回值中实际可以取到的时间(如:螺纹指数 5分钟周期 最后一根K线返回时间为1455,尾盘平仓设置为TIME>=1458,CLOSEOUT;则效果测试中不能出现尾盘平仓的信号)
(2)使用TIME函数作为尾盘平仓的条件的,建议开仓条件也要做相应的时间限制(如设置尾盘平仓条件为TIME>=1458,CLOSEOUT;则相应的开仓条件中需要添加条件TIME<1458;避免平仓后再次开仓的情况)
例1:
C>O&&TIME<1450,BK;
C<O&&TIME<1450,SK;
TIME>=1450,SP;
TIME>=1450,BP;
AUTOFILTER;
// 在14:50后平仓。
例2:
ISLASTSK=0&&C>O&&TIME>=0915,SK;
Tahun
YEAR,取得年份。
注:
YEAR的取值范围为1970—2033。
例1:
N:=BARSLAST(YEAR<>REF(YEAR,1))+1;
HH:=REF(HHV(H,N),N);
LL:=REF(LLV(L,N),N);
OO:=REF(VALUEWHEN(N=1,O),N);
CC:=REF(C,N); // 取上一年的最高价,最低价,开盘价,收盘价
例2:
NN:=IFELSE(YEAR>=2000 AND MONTH>=1,0,1);
Pilihlah bulan.
MONTH,返回某个周期的月份。
注:
MONTH的取值范围为1—12.
例1:
VALUEWHEN(MONTH=3&&DAY=1,C); // 在K线日期为三月一日时取其收盘价
例2:
C>=VALUEWHEN(MONTH<REF(MONTH,1),O),SP;
Jumlah hari dalam siklus tertentu
DAY,返回某一周期的日数。
注:
DAY取值范围为1-31。
例1:
DAY=3&&TIME=0915,BK; // 当日起为3日,时间为9点15分时,买开
例2:
N:=BARSLAST(DATE<>REF(DATE,1))+1;
CC:=IFELSE(DAY=1,VALUEWHEN(N=1,O),0); // 当日期为1时,取开盘价,否则取值为0
Jam
HOUR,返回某周期的小时数。
注:
HOUR的取值范围为0—23
例1:
HOUR=10; // 在10:00的K线上返回值为1,其余K线上返回值为0
Menit.
MINUTE,返回某个周期的分钟数。
注:
1:MINUTE的取值范围为0—59
2:该函数只能加载在分钟周期上,返回当根K线开始的分钟数。
例1:
MINUTE=0; // 在整点时刻的分钟K线上返回值为1,其余K线返回值为0
例2:
TIME>1400&&MINUTE=50,SP; // 在14:50的时候卖平仓
Jumlah minggu.
WEEKDAY,取得星期数。
注:
1:WEEKDAY的取值范围是0—6。(星期日 ~ 星期六)
例1:
N:=BARSLAST(MONTH<>REF(MONTH,1))+1;
COUNT(WEEKDAY=5,N)=3&&TIME>=1450,BP;
COUNT(WEEKDAY=5,N)=3&&TIME>=1450,SP;
AUTOFILTER; // 每个月交割日尾盘自动平仓
例2:
C>VALUEWHEN(WEEKDAY<REF(WEEKDAY,1),O)+10,BK;
AUTOFILTER;
Kembali ke posisi siklus saat ini.
BARSTATUS 返回当前周期的位置状态。
注:
该函数返回1表示当前周期是第一个周期,返回2表示是最后一个周期,返回0表示当前周期处于中间位置。
例:
A:=IFELSE(BARSTATUS=1,H,0); // 如果当前K线是第一个周期,变量A返回K线最高值,否则取0
Di antara:
BETWEEN(X,Y,Z) 表示X是否处于Y和Z之间,成立返回1(Yes),否则返回0(No)。
注:
1、其中若X=Y、X=Z、或X=Y且Y=Z时函数返回值为1(Yse)。
例1:
BETWEEN(CLOSE,MA5,MA10); // 表示收盘价介于5日均线与10日均线之间
BARSLASTCOUNT ((COND) Berhitung ke depan dari siklus saat ini, menghitung jumlah siklus yang memenuhi syarat secara berurutan.
注:
1、返回值为从当前周期计算COND连续不为0的周期数
2、条件第一次成立的当根k线上BARSLASTCOUNT(COND)的返回值为1
例:
BARSLASTCOUNT(CLOSE>OPEN);
//计算当根K线在内连续为阳线的周期数
Fungsi silang.
CROSS(A,B) 表示A从下方向上穿过B,成立返回1(Yes),否则返回0(No)
注:
1、满足穿越的条件必须上根k线满足A<=B,当根k线满足A>B才被认定为穿越。
例1:
CROSS(CLOSE,MA(CLOSE,5)); // 表示收盘线从下方向上穿过5周期均线
Menembus ke bawah
CROSSDOWN(A,B):表示当A从上方向下穿B,成立返回1(Yes),否则返回0(No)
注:
1、CROSSDOWN(A,B)等同于CROSS(B,A),CROSSDOWN(A,B)编写更利于理解
例1:
MA5:=MA(C,5);
MA10:=MA(C,10);
CROSSDOWN(MA5,MA10),SK; // MA5下穿MA10卖开仓
// CROSSDOWN(MA5,MA10),SK;与CROSSDOWN(MA5,MA10)=1,SK;表达同等意义
Menuju ke atas.
CROSSUP(A,B)表当A从下方向上穿过B,成立返回1(Yes),否则返回0(No)
注:
1、CROSSUP(A,B)等同于CROSS(A,B),CROSSUP(A,B)编写更利于理解。
例1:
MA5:=MA(C,5);
MA10:=MA(C,10);
CROSSUP(MA5,MA10),BK; // MA5上穿MA10,买开仓
// CROSSUP(MA5,MA10),BK;与CROSSUP(MA5,MA10)=1,BK;表达同等意义
Pengadilan memutuskan apakah kepuasan terus berlanjut
EVERY(COND,N),判断N周期内是否一直满足COND条件。若满足函数返回值为1,不满足函数返回值为0。
注:
1、N包含当前k线。
2、若N是有效数值,但前面没有那么多K线,或者N为空值,代表条件不满足,函数返回值为0。
3、N可以是变量。
例1:
EVERY(CLOSE>OPEN,5); // 表示5个周期内一直是阳线
例2:
MA5:=MA(C,5); // 定义5周期均线
MA10:=MA(C,10); // 定义10周期均线
EVERY(MA5>MA10,4),BK; // 4个周期内MA5都大于MA10,则买开仓
// EVERY(MA5>MA10,4),BK;与EVERY(MA5>MA10,4)=1,BK;表达同等意义
Menentukan apakah ada kepuasan.
EXIST(COND,N)判断N个周期内是否有满足COND的条件。
注:
1、N包含当前k线。
2、N可以是变量。
3、若N是有效数值,但前面没有那么多K线,按实际周期数计算。
例1:
EXIST(CLOSE>REF(HIGH,1),10); // 表示10个周期中是否存在收盘价大于前一个周期的最高价,存在返回1,不存在则返回0
例2:
N:=BARSLAST(DATE<>REF(DATE,1))+1;
EXIST(C>MA(C,5),N); // 表示当天是否有满足收盘价大于5周期均线的k线,存在返回1,不存在返回0
Fungsi kondisional.
IF(COND,A,B)若COND条件成立,则返回A,否则返回B。
注:
1、COND是判断条件;A、B可以是条件,也可以是数值。
2、该函数支持变量循环引用前一周期自身变量,即支持下面这样的写法Y:IF(CON,X,REF(Y,1))。
例1:
IF(ISUP,H,L); // k线为阳线,取最高价,否则取最低价
例2:
A:=IF(MA5>MA10,CROSS(DIFF,DEA),IF(CROSS(D,K),2,0)); // 当MA5>MA10时,取是否满足DIFF上穿DEA,否则(MA5不大于MA10),当K,D死叉时,令A赋值为2,若上述条件都不满足,A赋值为0
A=1,BPK; // 当MA5>MA10,以DIFF上穿DEA作为开多仓条件
A=2,SPK; // 当MA5不大于MA10,以K、D死叉作为开空仓条件
Fungsi kondisional.
IFELSE(COND,A,B) 若COND条件成立,则返回A,否则返回B。
注:
1、COND是判断条件;A、B可以是条件,也可以是数值。
2、该函数支持变量循环引用前一周期自身变量,即支持下面这样的写法Y: IFELSE(CON,X,REF(Y,1));
例1:
IFELSE(ISUP,H,L); // k线为阳线,取最高价,否则取最低价
例2:
A:=IFELSE(MA5>MA10,CROSS(DIFF,DEA),IFELSE(CROSS(D,K),2,0)); // 当MA5>MA10时,取是否满足DIFF上穿DEA,否则(MA5不大于MA10),当K,D死叉时,令A赋值为2,若上述条件都不满足,A赋值为0
A=1,BPK; // 当MA5>MA10,以DIFF上穿DEA作为开多仓条件
A=2,SPK; // 当MA5不大于MA10,以K、D死叉作为开空仓条件
Apakah saat ini adalah kontrak yang ditunjuk.
ISCONTRACT(CODE)当前是否为指定的合约。
用法:ISCONTRACT(CODE);是当前合约返回1,不是当前合约返回0。
注:
1、判断是否为指定合约时,CODE可以为合约的交易代码。
例:
ISCONTRACT('this_week'); // 数字货币OKEX期货合约
ISCONTRACT('XBTUSD'); // 数字货币BITMEX期货合约
Dukungan untuk ekspresi reguler.
Penghakiman kontrak
ISCONTRACT('this_week'); // 判断当前合约是否为OKEX期货 this_week(当周)合约
Menentukan nama bursa
ISCONTRACT('@Futures_(Binance|FTX)'); // 判断当前交易所对象是否为Binance期货或者FTX期货
ISCONTRACT('@(OKEX|Bitfinex)'); // 判断交易所,需要在开头加@字符
Sinar.
ISDOWN判断该周期是否收阴。
注:
1、ISDOWN等同于C<O
例:
ISDOWN=1&&C<REF(C,1),SK; // 当根k线收阴并且收盘价小于前一周期收盘价,则开空
// ISDOWN=1&&C<REF(C,1),SK;与ISDOWN&&C<REF(C,1),SK; 表达同等意义
Piring
ISEQUAL判断该周期是否平盘。
注:
1、ISEQUAL等同于C=O
例1:
EVERY(ISEQUAL=1,2),CLOSEOUT; // 持续2根k线都是平盘,则全平
Tentukan apakah siklus ini adalah garis K terakhir.
ISLASTBAR判断该周期是否为最后一根k线。
例1:
VALUEWHEN(ISLASTBAR=1,REF(H,1)); // 当前k线是最后一根k线,则取前一周期的最高价
Perhitungan nol.
ISNULL判断空值。
用法:ISNULL(N);如果N为空值,函数返回1;如果N为非空值,函数返回0。
例:MA5:=IFELSE(ISNULL(MA(C,5))=1,C,MA(C,5)); // 定义五周期均线,K线数量不足五根时,返回当根K线的收盘价
Sinar matahari
ISUP判断该周期是否收阳。
注:
1、ISUP等同于C>O。
例:
ISUP=1&&C>REF(C,1),BK; // 若当根k线收阳并且收盘价大于前一周期收盘价,则开多
// ISUP=1&&C>REF(C,1),BK; 与 ISUP&&C>REF(C,1),BK
// 表达同等意义
Fungsi penilaian.
LAST(COND,N1,N2)判断过去N1到N2周期内,是否一直满足COND条件。
注:
1、若N1与N2只相差一个周期(如N1=3,N2=2),则函数判断距离当前K线最近的那个周期上是否满足条件(即判断过去N2个周期的那根K线上是否满足条件)。
2、当N1/N2为有效值,但当前的k线数不足N1/N2根,或者N1/N2空值的情况下,代表不成立,该函数返回0。
3、N1、N2不可以是变量。
例1:
LAST(CLOSE>OPEN,10,5); // 表示从过去第10个周期到第5个周期内一直是阳线
例2:
MA5:=MA(C,5);
LAST(C>MA5,4,3); // 判断距离当前k线3个周期的那根k线上是否满足C大于MA5
Mempertahankan fungsi silang.
LONGCROSS(A,B,N)表示A在N个周期内都小于B,本周期A从下向上穿越B。
注:
1、当N为有效值,但当前的k线数不足N根时,LONGCROSS函数返回空值。
2、N不支持变量。
例1:
LONGCROSS(CLOSE,MA(CLOSE,10),20); // 表示收盘线在10日均线之下持续20周期后从下向上穿过10日均线
Tidak.
NOT(X):取非。当X=0时返回1,否则返回0。
例1:
NOT(ISLASTBK);如果上一个信号不是BK信号,则NOT(ISLASTBK)返回值为1;上一个信号是BK信号,则NOT(ISLASTBK)返回值为0。
例2:
NOT(BARSBK>=1)=1; // BK信号发出的当根K线上满足条件
// NOT(BARSBK>=1)=1与NOT(BARSBK>=1)表达同等意义
Kembali ke nol.
返回空值
用法:
MA5:=MA(C,5);
MA10:=MA(C,10);
A:=IFELSE(MA5>MA10,MA5,NULL),COLORRED; // 当MA5>MA10时,画五日均线MA5,不满足MA5>MA10时,返回空值,不画线
Pengertian
VALUEWHEN(COND,X)当COND条件成立时,取X的当前值。如COND条件不成立,则取上一次COND条件成立时X的值。
注:
X可以是数值也可以是条件。
例1
VALUEWHEN(HIGH>REF(HHV(HIGH,5),1),HIGH); // 表示当前最高价大于前五个周期最高价的最大值时返回当前最高价
例2:
VALUEWHEN(DATE<>REF(DATE,1),O); // 表示取当天第一根k线的开盘价(即当天开盘价)
例3:
VALUEWHEN(DATE<>REF(DATE,1),L>REF(H,1)); // 表示在当天第一根k线上判断当前最低价是否大于昨天最后一根K线的最高价。返回1,说明当天跳空高开。返回0,说明当天不满足跳空高开条件
Fungsi Kondisi Siklus.
LOOP2(COND,A,B);循环条件函数若COND条件成立,则返回A,否则返回B。
注:
1、COND是判断条件;A、B可以是条件,也可以是数值。
2、该函数支持变量循环引用前一周期自身变量,即支持下面这样的写法Y:=LOOP2(CON,X,REF(Y,1));
例1:
X:=LOOP2(ISUP,H,REF(X,1)); // k线为阳线,取当根K线的最高价,否则取上一次是阳线的K线的最高价;若之前未出现过阳线时,X返回为空值
例2:
BB:=LOOP2(BARSBK=1,LOOP2(L>LV(L,4),L,LV(L,4)),LOOP2(L>REF(BB,1),L,REF(BB,1))); // 持有多单时,开多单那根的前面4个周期内的最低价为起始止损点BB,后续K线最低价比前一个最低价高,取当前最低价为止损点,否则取前一个低点为止损点
SS:=LOOP2(BARSSK=1,LOOP2(H<HV(H,4),H,HV(H,4)),LOOP2(H<REF(SS,1),H,REF(SS,1))); // 持有空单时,开空单那根的前面4个周期内的最高价为起始止损点SS,最高价比前一个最高价低,取当前最高价为止损点,否则取前一个高点为止损点
H>HV(H,20),BK;
L<LV(L,20),SK;
C<BB,SP;
C>SS,BP;
AUTOFILTER;
Siklus pertama yang berlaku hingga periode saat ini.
BARSCOUNT(COND)第一个有效周期到当前的周期数。
注:
1、返回值为COND从第一个有效周期开始计算,到现在为止的周期数。
2、条件第一次成立的当根k线上BARSCOUNT(COND)的返回值为0。
例:
BARSCOUNT(MA(C,4)); // 计算MA(C,4)第一次有返回值到当前的周期数
Terakhir kali kondisi diposisikan.
”` BARSLAST(COND),上一次条件COND成立到当前的周期数。
注: 1、条件成立的当根k线上BARSLAST(COND)的返回值为0。
例1: BARSLAST(OPEN>CLOSE); // 上一根阴线到现在的周期数 例2: N:=BARSLAST(DATE<>REF(DATE,1))+1; // 分钟周期,当日k线数 // 由于条件成立的当根k线