[TOC]
Le langage My est un langage de transaction programmatique qui est compatible et amélioré avec le langage Mac. Le langage My quantifié par FMZ est soumis à des vérifications grammaticales rigoureuses, par exemple lors de l’utilisation d’une augmentation de langage pour intégrer le code du langage JavaScript, dans%%
Plus d’un caractère vierge après l’opérateur entraîne une erreur ▽.
Contrats de monnaie numérique
Contrats de monnaie numérique
this_week 数字货币期货当周合约
next_week 数字货币期货次周合约
month 数字货币期货月度合约
quarter 数字货币期货季度合约
next_quarter 数字货币期货次季度合约
third_quarter 数字货币期货第三季度合约
last_quarter 最后季度合约
XBTUSD BITMEX永续合约
swap 除BITMEX交易所以外数字货币期货永续合约
具体可以参看JavaScript/Python/C++文档的exchange.SetContractType()函数部分
Une variable est un espace ouvert dans la mémoire de l’ordinateur pour stocker des données.
Découvrez la première variable
// 将1赋值给变量a
a:=1;
exister麦语言
Dans, depuis数据量
La distinction est simple:
0
、1
、’abc’
。Close
(Prix de clôture), iciClose
Elle contient:n
Prix de clôture du cycle[ 10.1 , 10.2 , 10.3 , 10.4 , 10. 5 ...]
Distinction avec les variants de type
''
Les paquets, les types de chaînes de caractères ne sont pas autorisés à être utilisés directement, mais doivent être exportés dans la vue avec la fonction.INFO(CLSOE>OPEN,'OK!');
// 整数
int:=2;
// 小数
float:=3.1;
A:=1>0;
Il y a des gens qui ne sont pas d’accord avec moi.A
La valeur est 1.// 当前周期收盘价大于-999,你会发现,每个周期的返回值都是1,代表true,因为收盘价几乎不可能为负数
is_true:=Close>-999;
VARIABLE:VALUE1:10; // 声明一个全局变量,赋值为10,只执行一次。
Les réponses sont les suivantes:
VARIABLE:NX:0; // 初始一个全局变量NX为0
NX..NX+1; // 每次累加1
INFO(1,NX); // 每次打印NX
Au débutINFO
La phrase est imprimée101
Il y a peut-être des doutes sur le fait qu’il n’y ait pas eu d’initiation.0
Alors ?
La raison en est que la ligne K initiale a 100 racines au moment de la régression et a été traversée 100 fois.
Le disque dur dépend du nombre de lignes K obtenues initialement.
Dans la plupart des systèmes, la dénomination des variables ne permet pas l’utilisation d’une colonne système pour conserver les caractères (noms de variables intégrées, noms de fonctions). Par exemple, les noms de variables connusClose
、C
En outre, il est interdit de commencer par un nombre pur ou un nombre. Il est interdit de terminer par un nombre très long, car les limites de longueur varient selon les systèmes.
En fait, vous n’avez pas besoin de vous inquiéter de l’efficacité du système traditionnel pour le traitement de la langue chinoise, car le langage de l’argousier est très convivial pour la langue chinoise.
1. Nom chinois
// 优雅的输出
五日均线:=MA(C,5);
2. Anglais + souligné
// 输出
move_avg_5:=MA(C,5);
Si vous préférez l’anglais, faites en sorte que les gens comprennent la signification de vos variantes autant que possible.A1
,AAA
,BBB
…cette façon de nommer les choses. Je suis sûr que lorsque vous revisez votre code de référence après un certain temps, vous serez très malheureux à cause de la perte de mémoire. De même, lorsque vous exportez le code à quelqu’un d’autre, l’esprit du lecteur doit s’effondrer.
Alors, à partir de maintenant, embrassez le langage de l’argousier avec amour et laissez-le devenir un outil puissant pour votre analyse et votre prise de décision.
Le type de données est une notion fondamentale dans la programmation: lorsque nous attribuons une valeur de données spécifique à une variable, cette variable devient le type de la donnée elle-même.
1、2、3、1.1234、2.23456 ...
'1' 、'2' 、'3' ,字符串类型必须用 '' 包裹
一系列单值数据构成的数据集合
Utilisation1
Le représentanttrue
,0
Le représentantfalse
。
Exemple
// 声明一个数值类型的变量
var_int := 1;
// 声明一个序列数据的变量
var_arr := Close;
// 字符串类型不能单独声明,需要结合函数
INFO(C>O, '阳线');
Les symboles utilisés pour effectuer les opérations et les calculs du code de l’indicateur sont, en termes simples, les symboles qui participent aux opérations.
Utilisé pour attribuer une valeur à une variable
- 1. `:`
`:`, représente l'attribution et est exporté dans le graphique (en sous-graphique).
```
Close1:Close; // 将Close赋值给变量Close1,并且输出到图中
```
- 2. `:=`
`:=`, représente une attribution, mais n'est pas exportée dans le diagramme (groupe, sous-groupe...) et n'apparaît pas dans le tableau de bord.
```
Close2:=Close; // 将Close赋值给变量Close2
```
- 3. `^^`
`^^`Deux et trois.`^`Le symbole représente l'attribution d'une valeur à une variable et est exporté dans le diagramme (le diagramme principal).
```
lastPrice^^C;
```
- 4. `..`
`..`Deux et trois.`.`Les symboles représentent l'attribution d'une valeur à une variable et affichent le nom et la valeur de la variable dans le graphique, mais ne sont pas représentés dans le graphique (graphique principal, graphique secondaire, etc.).
```
openPrice..O
```
L’opérateur de relation est un opérateur binaire utilisé dans les expressions conditionnelles. Il permet de déterminer la relation entre deux données.
Retourne une valeur de type Boole, nontrue
(1) Ce qui signifiefalse
(0)。
- 1. Plus que`>`
```
// 将2>1的运算结果赋值给rv1变量,此时rv1=1
rv1:=2>1;
```
- 2. inférieure à`<`
```
// 返回false,也就是0,因为2大于1
rv3:=2<1;
```
- 3. Plus est égal à`>=`
```
x:=Close;
// 将收盘价大于等于10的运算的结果赋值给变量rv2
// 注意,由于close是一个序列数据,当进行close>=10运算的时候,本质是每个周期都进行运算,所以每个周期都会有一个1、0的返回值
rv2:=Close>=10;
```
- 4. inférieur à égal à`<=`
```
此处省略
```
- 5. égal`=`
```
A:=O=C; // 判断开盘价是不是等于收盘价。
```
- 6. Ce n'est pas`<>`
```
1<>2 // 判断1是否不等于2,返回值为1(true)
```
Retourne une valeur de type Boole, nontrue
(1) Ce qui signifiefalse
(0)。
1. La logique et`&&`Elle est disponible.`and`Il faut que les deux côtés de la connexion soient créés simultanément.
// 判断 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. La logique ou`||`Elle est disponible.`or`Le remplacement ou le lien se fait à droite et à gauche, le côté est établi comme étant "true" et l'ensemble est établi comme étant "true".
cond_a:=1>2;
cond_b:=4>3;
cond_c:=5>6;
cond_a || cond_b or cond_c; // 返回值为1,成立
3. `()`L'opérateur calcule d'abord l'expression dans les parenthèses.
1>2 AND (2>3 OR 3<5) // 运算结果为假
1>2 AND 2>3 OR 3<5 // 运算结果为真
返回值:数值类型
Les opérateurs arithmétiques sont les symboles utilisés pour effectuer les opérations arithmétiques de base, c’est-à-dire les symboles utilisés pour traiter quatre opérations.
- **Plus ou moins**
```
A:=1+1; // 返回 2
```
- **Réduction**
```
A:=2-1; // 返回 1
```
- **On multiplie.***
```
A:=2*2; // 返回 4
```
- **À part**
```
A:=4/2; // 返回 2
```
Dans le monde de la programmation, une colonne de fonction est un morceau de code qui implémente une certaine fonction. Elle peut également être appelée par d’autres codes, de la manière suivante:
function(param1,param2,...)
- Composé de:
Le nom de la fonction ((paramètre 1, paramètre 2, ...), peut ne pas avoir de paramètre ou avoir plusieurs paramètres. Par exemple:`MA(x,n);`Retour des délégués`n`Au cours du cycle`x`Les moyennes mobiles simples sont:`MA()`C'est une fonction.`x`et`n`C'est le paramètre de la fonction.
En utilisant une fonction, nous avons besoin de connaître la définition de base de la fonction, c'est-à-dire quelles données peuvent être obtenues en l'appelant. En général, les fonctions ont des paramètres, et lorsque nous transmettons des paramètres, nous devons nous assurer que le type de données transmis est conforme.`MA(x,n);`L'explication est la suivante:
```
返回简单移动平均
用法:
AVG:=MA(X,N): X的N日简单移动平均,算法(X1+X2+X3+...+Xn)/N,N支持变量
```
Ce n'est pas très convivial pour les débutants. Ensuite, nous faisons une analyse complète des fonctions et essayons de trouver une façon de les apprendre rapidement et de les utiliser.
Pour apprendre rapidement les fonctions, nous devons d’abord comprendre un concept appelé “valeur de retour”.Le retour.En dépit de son nom, il s’agit de “retour”. La valeur signifie “valeur numérique spécifique”, donc la valeur de retour signifie: les données pouvant être obtenues.
// 因为后面的代码中会用到,所以用变量 return_value 接收、保存 function()的返回值
// retrun_value := function(param1,param2);
// 例如:
AVG:=MA(C,10); // AVG即retrun_value,function函数即:MA函数,param1参数:C即收盘价序列数据,param2参数:10。
Le deuxième concept important de la fonction secondaire est celui des paramètres, qui peuvent être transmis à des valeurs différentes.
// 变量ma5接收5日收盘价移动平均值
ma5:=MA(C,5);
// 变量ma10接收10日收盘价移动平均值
ma10:=MA(C,10);
Les variables ci-dessusma5
、ma10
Le premier argument deX
Les deuxC
(Prix de clôture), en faitC
On peut aussi utiliser une fonction ((pour retourner la séquence de prix d’ouverture et de fermeture jusqu’à présent), mais sans paramètre. Le deuxième paramètre est 5, 10 qui est utilisé pour indiquerMA()
La fonction, nous allons obtenir une moyenne mobile de quelques jours de prix de clôture, avec les paramètres, la fonction devient plus flexible.
MA(x,n)
Si vous ne connaissez pas les paramètresx
、n
Le type de données de la base de données de la base de données de la base de données de la base de données de la base de données de la base de données de la base de données.La présentation et l’utilisation des fonctions suivantes suivent les trois principes ci-dessus.
麦语言
etJavaScript
La programmation mixte %%
// 这里面可以调用发明者量化的任何API
scope.TEST = function(obj) {
return obj.val * 100;
}
%%
收盘价:C;
收盘价放大100倍:TEST(C);
上一个收盘价放大100倍:TEST(REF(C, 1)); // 鼠标移动到回测的K线上就会提示变量值
- `scope`Objets
`scope`Les objets peuvent ajouter des attributs et attribuer une fonction d'anonymisation à ces attributs, appelant la fonction d'anonymisation qui fait référence à cet attribut dans la section de code du langage Mac.
- `scope.getRefs(obj)`fonction
exister`JavaScript`Dans le bloc de code, appel`scope.getRefs(obj)`La fonction renvoie l'entrée`obj`Données de l'objet.
Ci-après`%% %%`Enveloppé dans des symboles`JavaScript`Le code de l'application est un code de langue Mac.`TEST(C)`Le nombre de fois que la fonction est appelée`C`Prix de clôture
`scope.getRefs`La fonction renvoie toutes les valeurs de clôture de cette ligne K.`throw "stop"`La procédure d'interruption.`arr`Il contient seulement le prix de clôture de la première barre.`throw "stop"`Je vais le faire.`JavaScript`Le code est terminé.`return`Les prix de cession ont été reportés à la fin de l'année, mais les prix de cession ont été reportés.
```
%%
scope.TEST = function(obj){
var arr = scope.getRefs(obj)
Log("arr:", arr)
throw "stop"
return
}
%%
TEST(C);
```
- scope.bars
exister`JavaScript`Accédez à toutes les lignes K dans le bloc de code.
`TEST`La fonction renvoie une valeur: 1 pour le négatif et 0 pour le 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
exister`JavaScript`Dans le bloc de code, accédez à la barre actuelle.
Calculer la moyenne des prix des récoltes élevées et basses.
```
%%
scope.TEST = function(){
var bar = scope.bar
var ret = (bar.Open + bar.Close + bar.High + bar.Low) / 4
return ret
}
%%
avg^^TEST;
```
- scope.depth
Accédez aux données de profondeur du marché ((les commandes sont faibles))
```
%%
scope.TEST = function(){
Log(scope.depth)
throw "stop" // 打印一次深度数据后就抛出异常,暂停
}
%%
TEST;
```
- scope.symbol
Obtenir une chaîne de noms de paires en cours de négociation.
```
%%
scope.TEST = function(){
Log(scope.symbol)
throw "stop"
}
%%
TEST;
```
- scope.barPos
Obtenir la position de la ligne K Bar.
```
%%
scope.TEST = function(){
Log(scope.barPos)
throw "stop"
}
%%
TEST;
```
- scope.get_locals('name')
Cette fonction est utilisée pour extraire les variables de la section de code de la langue 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`Attributs indiquant si la barre actuelle est la dernière racine.
Par exemple, pour déterminer si la stratégie est prête à passer une commande, imprimer des données de situation
```
%%
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);
La stratégie est interrompue après avoir ouvert ou vidé une position.
Le système choisit automatiquement une période de ligne K sous-jacente appropriée et utilise cette période de ligne K sous-jacente pour synthétiser toutes les données de ligne K citées, assurant ainsi l’exactitude des données.
#EXPORT 公式名 ... #END
Créer une formule. Si vous ne faites pas de calculs de formule pour obtenir des données de différentes périodes, vous pouvez également écrire une formule vide.La formule vide est la suivante:
#EXPORT TEST
NOP;
#END // 结束
#IMPORT [MIN,周期,公式名] AS 变量值
Citez la formule pour obtenir les données de la période définie (prix de clôture, prix d’ouverture, etc., obtenu par les valeurs des variables) IMPORT
Dans l’ordreMIN
Ça veut dire:Nombre de minutes◦ La plateforme de quantification de l’inventeur, le langage Mac,IMPORT
Commandes uniquementMIN
Le cycle non standard est désormais pris en charge, par exemple#IMPORT [MIN,240,TEST] AS VAR240
Importez des données telles que la ligne K avec une période de 240 minutes (environ 4 heures).
Exemple de code
// 本代码演示如何引用不同周期的公式在同一代码里
// #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
Attention aux instructions qui citent des données (*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;
ComparaisonMIN5.REF1C
etREF(MIN5.C, 1)
Les différences sont les suivantes:
MIN5.REF1C
est la valeur de clôture de la seconde BAR inversée du moment actuel de la ligne K de 5 minutes.
REF(MIN5.C, 1)
est la période de la ligne K du modèle actuel ((le code ci-dessus a une période de rétroaction de 1 minute, soitperiod: 1m
), le prix de clôture d’un cycle de 5 minutes où BAR est le second inverse de l’instant présent.
Les deux définitions sont différentes et peuvent être utilisées selon les besoins.
En écrivant dans le modèleAUTOFILTER
Pour contrôler et réaliser un filtrage uniforme des signaux, lorsque plusieurs signaux d’ouverture de stock sont satisfaits, le premier signal est pris comme signal valide et le même signal sur la ligne k suivante est filtré.
Les instructions prises en charge par le modèle de filtrage sont les suivantes: BK, BP, BPK, SK, SP, SPK, CLOSEOUT, BK ((5) n’est pas pris en charge.
Par exemple:
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线触发一次信号。
Pas écrit dans le modèleAUTOFILTER
Fonction permettant de générer des signaux d’ouverture ou de clôture de position en continu.
Les directives prises en charge sont: BK (N), BP (N), SK (N), SP (N), CLOSEOUT (BPK (N), SP (N), et ne prennent pas en charge les directives d’ouverture de position sans le numéro de série. (1) Prise en charge du regroupement des instructions. (2) Lorsque plusieurs conditions de l’instruction sont remplies simultanément, le signal est exécuté dans l’ordre précédent écrit dans l’instruction conditionnelle. Par exemple:
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);
utiliserTRADE\_AGAIN
Il est possible d’utiliser la même commande pour envoyer plusieurs signaux.
理解:
以上例子,逐个信号执行,执行后的信号不再触发。平仓后重置模型状态。一个K线触发一次信号。
Le signal est calculé en temps réel, indépendamment de la fin de la ligne K, c’est-à-dire que la ligne K n’a pas terminé l’ordre précédent; la ligne K est vérifiée à la fin de la ligne K. Si la direction de la position est différente de la direction du signal à la fin de la ligne k, la position est automatiquement synchronisée.
Par exemple:
MA1:MA(CLOSE,5);
MA2:MA(CLOSE,10);
CROSSUP(MA1,MA2),BPK; // 5周期均线上穿10周期均线做多。
CROSSDOWN(MA1,MA2),SPK; // 5周期均线下穿10周期均线做空。
AUTOFILTER;
Modèle par utilisationmultsig
Pour le contrôle et la réalisation d’un K-thread, plusieurs signaux sont émis.
Les commandes sont effectuées en temps réel, indépendamment de la fin de la ligne k.
Le signal n’est pas vérifié, il n’y a pas de cas de disparition du signal, la direction du signal est toujours la même que la direction de la position.
Une ligne K peut être exécutée plusieurs fois si plusieurs conditions de signal sont remplies.
例如:
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
On peut exécuter plusieurs lignes de commande sur une seule ligne K.
Une ligne de commande ne donne qu’un seul signal.
O<C,BK; // 这些条件在一个K线Bar内,可能都执行,但是每行只出一次信号
10+O<C,BK; // 策略加上TRADE_AGAIN(10);可以使每行出多次信号
20+O<C,BK;
40+O<C,BK;
MULTSIG(1,1,10);
Il ajoute:
Les deux types de signaux d’une ligne k, soit un ordre de clôture et un ordre d’ordre, sont supportés.
Le modèle d’accumulation et de réduction de stockage, qui prend en charge une ligne k avec plusieurs commandes de signaux.
Le modèle d’addition et de déduction.multsig
La fonction, qui implique plusieurs fois d’augmenter ou de diminuer le poids sur une ligne k.
Le modèle de prix de clôture implique que le modèle est exécuté à la fin du BAR actuel et que la transaction est exécutée au début du BAR sous-jacent.
Les modèles de prix en temps réel sont des modèles qui sont exécutés une fois pour chaque variation de prix, et qui sont négociés immédiatement après le signal. Les modèles de prix en temps réel ignorent les signaux de la journée précédente (les signaux de la journée précédente sont exécutés immédiatement la veille), les modèles de prix en temps réel ne regardent que les données actuelles pour déterminer si le signal a été déclenché ou non.
Utilisation des opérateurs
^^
, les paramètres sont affichés sur le graphique principal tout en donnant une valeur à la variable.
MA60^^MA(C, 60); // 计算参数为60的均线指标
Utilisation des opérateurs:
Les paramètres sont affichés dans le sous-diagramme, en même temps que l’attribution des valeurs aux variables.
ATR:MA(MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW)),26); // 给ATR变量赋值,":"符号后为计算ATR的公式
Si vous ne souhaitez pas qu’il soit affiché sur le graphique principal ou le graphique secondaire, utilisez l’opérateur “..”
MA60..MA(C, 60); // 计算参数为60的均线指标
À utiliserDOT
、COLORRED
Le type de ligne, la couleur, etc. de la ligne est adapté aux habitudes des utilisateurs familiers avec le Mac.
Découvrez ce qui est communément rencontré lors de la rédaction d’indicateursQuestions à se poser, généralement un point à prendre en compte lors de la rédaction ((continuer à compléter) ).
Attention à la ponctuation;
La fin du film.
Attention: les mots-clés du système ne peuvent pas être déclarés comme variables.
Attention à l’utilisation de chaînesUne seule citation,Par exemple:'开仓'
Cette chaîne de caractères:
Le commentaire
- `// 注释内容`La compilation de code (ou non-compilation) est l'exécution de code qui n'est pas compilé.`//`Le contenu de ce qui suit est généralement utilisé pour marquer le sens du code, afin de faciliter la compréhension et la mémorisation lors de la révision du code.
- `{ 注释内容 }`Les notes.
```
A:=MA(C,10);
{上一行代码是计算均线。}
```
- `(* 注释内容 *)`Les notes.
```
A:=MA(C,10);
(*上一行代码是计算均线。*)
```
Lors de l’écriture du code, il est fréquent que des erreurs de symboles soient causées par la commutation entre l’anglais et l’anglais. Les types les plus courants sont les suivants::
Le point final;
Une virgule,
Dans les parenthèses()
Et ainsi de suite. Attention aux différents caractères dans l’état chinois-anglais.
Si vous utilisez Google+, Baidu ou Bing, vous pouvez le faire en appuyant une fois sur le bouton de commande.
shift
Touchez pour passer rapidement de l’anglais au chinois.
>=
。<=
。Dans une stratégie à terme, si une position détenue a été ouverte manuellement avant le démarrage du robot de stratégie, l’information sur la position détenue sera détectée lors du démarrage du robot et synchronisée avec l’état réel de la position.
Il est possible de les utiliser dans des stratégies.SP
, BP
,CLOSEOUT
Le siège est à l’arrêt.
%%
if (!scope.init) {
var ticker = exchange.GetTicker();
exchange.Buy(ticker.Sell+10, 1);
scope.init = true;
}
%%
C>0, CLOSEOUT;
Les langues Mac ne prennent pas en charge les mêmes contrats et les mêmes dépôts.
Le prix d’ouverture de la carte K.
Prix de départ
Fonction: OPEN, écrite O
Paramètre: Aucun
Explication: Retour sur le prix d’ouverture du cycle
Données séquentielles
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简写)。
Le prix le plus élevé pour obtenir une carte K.
Prix le plus élevé
Fonction: HIGH, écrite H
Paramètre: Aucun
Expliquer: Retour sur le prix le plus élevé du cycle
Données séquentielles
HIGH取得K线图的最高价。
注:
1、可简写为H。
例1:
HH:=H; // 定义HH为最高价
例2:
HH:=HHV(H,5); // 取的5个周期内最高价的最大值
例3:
REF(H,1); // 取的前一根K线的最高价
Le prix le plus bas pour obtenir une carte K.
Prix le plus bas
Fonction: LOW, abréviation L
Paramètre: Aucun
Explication: Retour au prix le plus bas du cycle
Données séquentielles
LOW取得K线图的最低价。
注:
1、可简写为L。
例1:
LL:=L; // 定义LL为最低价
例2:
LL:=LLV(L,5); // 取得5个周期内最低价的最小值
例3:
REF(L,1); // 取得前一根K线的最低价
Le prix de clôture de la carte K.
Prix de clôture
Fonction: CLOSE, abréviation de C
Paramètre: Aucun
Explication: Retour au cours de clôture du cycle
Données séquentielles
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线的收盘价
Obtenir le nombre de transactions sur une carte K.
Nombre de transactions réalisées
Fonction: VOL, abrégé V
Paramètre: Aucun
Explication: Retour sur le chiffre d’affaires de ce cycle.
Données séquentielles
VOL取得K线图的成交量。
注:
可简写为V。
该函数在当根TICK上的返回值为当天所有TICK成交量的累计值。
例1:
VV:=V; // 定义VV为成交量
例2:
REF(V,1); // 表示前一个周期的成交量
例3:
V>=REF(V,1); // 成交量大于前一个周期的成交量,表示成交量增加(V为VOL的简写)
Prenez le total des positions sur le marché des contrats à terme actuel.
OpenInterest:OPI;
Citations précédentes
引用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é de transaction pour laquelle le contrat de données a été conclu.
取数据合约的交易单位。
用法:
UNIT 取加载数据合约的交易单位。
La monnaie numérique en espèces
La valeur UNIT est 1.
Contrats à terme sur crypto-monnaies
La valeur de l’UNIT est liée à la monnaie du contrat.
OKEX期货币本位合约:BTC合约1张代表100美元,其它币种的1张合约代表10美元
Le prix minimum du contrat de données.
取数据合约的最小变动价位。
用法:
MINPRICE; 取加载数据合约的最小变动价位。
Le prix minimum de variation du contrat de négociation
取交易合约的最小变动价位。
用法:
MINPRICE1; 取交易合约的最小变动价位。
Prenez la position de la ligne K
BARPOS,返回从第一根K线开始到当前的周期数。
注:
1、BARPOS返回本地已有的K线根数,从本机上存在的数据开始算起。
2、本机已有的第一根K线上返回值为1。
例1:LLV(L,BARPOS); // 求本地已有数据的最小值。
例2:IFELSE(BARPOS=1,H,0); // 当前K线是本机已有的第一根K线取最高值,否则取0。
DAYBARPOS comme racine K BAR est la racine K de la journée BAR。
La valeur de la période est le nombre de minutes.
1, 3, 5, 15, 30, 60, 1440
Date et lieuLa fonction DATE, qui obtient la date du mois de l’année depuis 1900 pour cette période.
例1:
AA..DATE; // 测试时AA的值为220218,表示2022年2月18日
Le temps de prendre la ligne 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;
Année
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);
Prenez le mois
MONTH,返回某个周期的月份。
注:
MONTH的取值范围为1—12.
例1:
VALUEWHEN(MONTH=3&&DAY=1,C); // 在K线日期为三月一日时取其收盘价
例2:
C>=VALUEWHEN(MONTH<REF(MONTH,1),O),SP;
Le nombre de jours d’un cycle
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
Une heure.
HOUR,返回某周期的小时数。
注:
HOUR的取值范围为0—23
例1:
HOUR=10; // 在10:00的K线上返回值为1,其余K线上返回值为0
Une minute.
MINUTE,返回某个周期的分钟数。
注:
1:MINUTE的取值范围为0—59
2:该函数只能加载在分钟周期上,返回当根K线开始的分钟数。
例1:
MINUTE=0; // 在整点时刻的分钟K线上返回值为1,其余K线返回值为0
例2:
TIME>1400&&MINUTE=50,SP; // 在14:50的时候卖平仓
Nombre de semaines
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;
Retourner à l’état de la position du cycle en cours.
BARSTATUS 返回当前周期的位置状态。
注:
该函数返回1表示当前周期是第一个周期,返回2表示是最后一个周期,返回0表示当前周期处于中间位置。
例:
A:=IFELSE(BARSTATUS=1,H,0); // 如果当前K线是第一个周期,变量A返回K线最高值,否则取0
Les médias.
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) Compte à l’avance à partir du cycle actuel, en calculant le nombre de cycles qui satisfont à la condition de manière continue.
注:
1、返回值为从当前周期计算COND连续不为0的周期数
2、条件第一次成立的当根k线上BARSLASTCOUNT(COND)的返回值为1
例:
BARSLASTCOUNT(CLOSE>OPEN);
//计算当根K线在内连续为阳线的周期数
Fonction de croix
CROSS(A,B) 表示A从下方向上穿过B,成立返回1(Yes),否则返回0(No)
注:
1、满足穿越的条件必须上根k线满足A<=B,当根k线满足A>B才被认定为穿越。
例1:
CROSS(CLOSE,MA(CLOSE,5)); // 表示收盘线从下方向上穿过5周期均线
Traversée vers le bas
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;表达同等意义
En haut, en travers.
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;表达同等意义
La satisfaction est-elle maintenue ?
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;表达同等意义
Déterminez si vous êtes satisfait.
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
Fonction conditionnelle
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死叉作为开空仓条件
Fonction conditionnelle
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死叉作为开空仓条件
Si le contrat est en cours de désignation
ISCONTRACT(CODE)当前是否为指定的合约。
用法:ISCONTRACT(CODE);是当前合约返回1,不是当前合约返回0。
注:
1、判断是否为指定合约时,CODE可以为合约的交易代码。
例:
ISCONTRACT('this_week'); // 数字货币OKEX期货合约
ISCONTRACT('XBTUSD'); // 数字货币BITMEX期货合约
Les expressions régulières sont prises en charge.
Comment juger un contrat
ISCONTRACT('this_week'); // 判断当前合约是否为OKEX期货 this_week(当周)合约
Déterminer le nom de l’échange
ISCONTRACT('@Futures_(Binance|FTX)'); // 判断当前交易所对象是否为Binance期货或者FTX期货
ISCONTRACT('@(OKEX|Bitfinex)'); // 判断交易所,需要在开头加@字符
Le mystère.
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; 表达同等意义
Le plateau
ISEQUAL判断该周期是否平盘。
注:
1、ISEQUAL等同于C=O
例1:
EVERY(ISEQUAL=1,2),CLOSEOUT; // 持续2根k线都是平盘,则全平
Détermine si le cycle correspond à la dernière ligne K.
ISLASTBAR判断该周期是否为最后一根k线。
例1:
VALUEWHEN(ISLASTBAR=1,REF(H,1)); // 当前k线是最后一根k线,则取前一周期的最高价
Jugez la valeur zéro.
ISNULL判断空值。
用法:ISNULL(N);如果N为空值,函数返回1;如果N为非空值,函数返回0。
例:MA5:=IFELSE(ISNULL(MA(C,5))=1,C,MA(C,5)); // 定义五周期均线,K线数量不足五根时,返回当根K线的收盘价
Les rayons du soleil
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
// 表达同等意义
Fonction de jugement
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
Maintenance de la fonction de croix
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日均线
Pas du tout.
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)表达同等意义
Retour à zéro.
返回空值
用法:
MA5:=MA(C,5);
MA10:=MA(C,10);
A:=IFELSE(MA5>MA10,MA5,NULL),COLORRED; // 当MA5>MA10时,画五日均线MA5,不满足MA5>MA10时,返回空值,不画线
La mise en valeur
”` VALUEWHEN(COND,X)当COND条件成立时,取X的当前值。如C