2.1 Utilisez des API pour obtenir des informations sur les comptes, des données de marché, des données de ligne K, des informations de profondeur sur le marché

Auteur:Le petit rêve, Créé: 2016-11-05 16:41:04, Mis à jour: 2019-08-01 09:31:23

2.1 Utilisez des API pour obtenir des informations sur les comptes, des données de marché, des données de ligne K, des informations de profondeur sur le marché

Nous arrivons enfin au deuxième chapitre, et grâce à la visite du chapitre précédent, nous devrions avoir une certaine compréhension des fonctionnalités de la quantification par les inventeurs.


  • Utilisez l'API pour obtenir des informations sur les comptes

    Supposons que la visite du premier chapitre ait déjà ajouté un gestionnaire, une bourse, bien sûr, nous pouvons tester le code avec l'Inventor Quantified Simulation Disk.

    Tout d'abord, nous avons créé une stratégie, appelons-la Test 1.img

    L'interface de modification stratégiqueimg img

    Le code est le suivant:

function main() {
    Log(exchange.GetAccount()); // 看过API 文档后知道, exchange就是交易所对象,实际上策略有个全局变量
                                // exchanges 数组,这个数组存放的就是你创建机器人或者回测时添加的交易所(可以是多个)
                                // 添加1个交易所 exchanges 数组就只包含1个交易所对象,即添加的交易所对象。
                                // 那么 exchange 和 exchanges 是什么关系呢? 其实 exchange 就是 exchanges[0] ,
                                // exchange 就是 exchanges 数组的第一个元素(这里这个元素是交易所对象)。
                                
                                // Log()函数应该也不陌生吧,这个API 就是输出一条日志,日志内容就是Log括号里面的参数。
}

La stratégie de création d'un robot, également appelée test1 binding, est appelée test1 hash, quantifiée par l'inventeur.img img

La stratégie s'exécute instantanément et affiche un message de compte.img

Il s'avère que nous allons comparer les informations de compte avec celles de l'analogue.img

  • Obtenir des données sur le marché

function main() {
    Log(exchange.GetAccount()); // 已经知道怎么获取 主交易所 账户信息了
    //下面我们来试试 不停的获取行情数据。 
    while(true){ // 这里用一个无限循环的结构来不停的获取 交易所行情数据。
        Log("行情数据:", exchange.GetTicker()); // 哇! Log() 函数的括号里面可以写2个参数,第一个参数是: "行情数据:"
                                               // 第二个参数是 exchange.GetTicker() 这个函数的返回值。就是主交易所的行情数据。
                                               // 注意 Log() 函数的参数要用 逗号分隔。
        Sleep(1000);   // 咦~ 这个又是什么? 答:机器人程序 执行循环也需要休息!它可是执行很快的哦!(一秒N次)
                       // Sleep 函数的作用就是让程序暂停一会儿,括号里面的参数 1000 是 毫秒数, 1秒 = 1000毫秒。Sleep(1000);就是暂停1000毫秒。
                       // 不要小看这个参数,这个参数控制了程序的轮询频率,间接影响访问 交易所API 的频率,有些交易所API访问过于频繁可是会拒绝访问的。
    }
}

img Les gens sont en colère.Certains d'entre vous ont peut-être remarqué que les prix les plus élevés et les prix les plus bas obtenus par la fonction GetTicker sont très différents. Par exemple, les prix les plus élevés et les prix les plus bas de la fonction GetTicker sont les prix les plus élevés et les prix les plus bas dans le cycle convenu par l'échange, en fonction de la configuration de l'échange.

  • Obtenir les données de la ligne K

    Nous allons d'abord voir la description de l'API:
GetRecords(Period)	返回一个K线历史, K线周期在创建机器人时指定, Record数组结构
不加参数, 默认返回添加机器人时时指量的K线周期, 但也可以自定义K线周期
支持: PERIOD_M1 指1分钟, PERIOD_M5 指5分钟, PERIOD_M15 指15分钟, PERIOD_M30 指30分钟, PERIOD_H1 指1小时, PERIOD_D1 指一天

Nous écrivons un code pour tester les données de la ligne K de la période par défaut (cinq minutes).

function main() {
    Log(exchange.GetAccount()); // 已经知道怎么获取 主交易所 账户信息了
    //下面我们来试试 不停的获取行情数据。 
    var records = exchanges[0].GetRecords();  // 按照默认周期获取K线数据
    Log("records:", records);  // 在日志中输出 获取到的K线数据。
}

Affichage de la sortie: Les records: [{Time:1478260200000,Open:4765.14,High:4773,Low:4764.54,Close:4769.47,Volume:5211.539999999999}, le jeu est disponible en téléchargement gratuit depuis le site officiel du jeu. {Time:1478260500000,Open:4769.47,High:4773.01,Low:4764,Close:4764.78,Volume:3742.250000000002}, qui a été publié par le site officiel de l'entreprise. Je ne sais pas si tu as bien compris ce que je veux dire. Je ne sais pas si tu as bien compris. {Time:1478261100000,Open:4781.28,High:4795,Low:4774,Close:4792.02,Volume:11793.540000000006}, qui a été publié par le site officiel de l'ONU. Il a été conçu pour être utilisé par les utilisateurs de l'Internet, mais il n'a pas été conçu pour être utilisé par les utilisateurs du Web. {Time:1478261700000,Open:4786.51,High:4788.66,Low:4775,Close:4775.31,Volume:7722.33999999965}

On peut voir que les records de variables sont un ensemble structuré qui est classé par ordre de temps de K lignes, de loin à près. En passant, la ligne K: (certains graphiques sont en rouge pour les rayons du soleil, en vert pour les rayons du vagin, et d'autres pour les couleurs opposées).imgVoir ci-dessous un exemple de diagramme de ligne K pour une période de 5 minutes sur la plateforme.img Attention:Une fois un cycle de K lignes terminé, sa valeur est définie. Dans l'utilisation pratique, nous appelons var records = exchanges [0].GetRecords ((); le dernier élément de l'array de données enregistrées retourné, les records[records.length-1], est en constante évolution jusqu'à ce que son cycle soit terminé. Il est même possible, à la dernière seconde, de changer de rayon solaire en rayon pénal.

La fonction GetRecords renvoie les données de cycle par défaut selon les paramètres de la stratégie sans ajouter de paramètres. Il est également possible de transmettre des paramètres pour spécifier des cycles de la ligne K. Les systèmes de retouche actuels prennent en charge la transmission de paramètres de GetRecords pour spécifier des cycles (" sans paramètres renvoie des données selon les paramètres de cycle par défaut "), ce qui permet à la stratégie de retouche d'utiliser des cycles différents en même temps.

  • Pour obtenir des informations détaillées sur le marché

    GetDepth renvoie une structure de profondeur
function main() {
    var depth = exchanges[0].GetDepth();   //获取市场深度信息,  返回订单薄信息,一个对象包含2个属性,每个属性是一个对象数组。
    Log("depth:", depth);    // 日志中输出,一下的输出是 整理过的格式,是方便读者理解,实际上是所有内容都在一行显示的。
}

Le code ci-dessus a été revérifié comme suit:

depth: 
{"Asks":[{"Price":4726.07,"Amount":15},   // 卖单数组,回测时,数据都是模拟出来的,所以Amount 都是 15,索引为0的是卖一,依次类推。
         {"Price":4726.08,"Amount":15},
         {"Price":4726.09,"Amount":15},
         {"Price":4726.1,"Amount":15},
         {"Price":4726.11,"Amount":15},
         {"Price":4726.12,"Amount":15},
         {"Price":4726.13,"Amount":15},
         {"Price":4726.14,"Amount":15},
         {"Price":4726.15,"Amount":15},
         {"Price":4726.16,"Amount":15},
         {"Price":4726.17,"Amount":15}],
"Bids":[{"Price":4726.05,"Amount":15},   //  买单数组,索引为0的是买一, 向后依次类推。
        {"Price":4726.04,"Amount":15},
        {"Price":4726.03,"Amount":15},
        {"Price":4726.02,"Amount":15},
        {"Price":4726.01,"Amount":15},
        {"Price":4726,"Amount":15},
        {"Price":4725.99,"Amount":15},
        {"Price":4725.98,"Amount":15},
        {"Price":4725.97,"Amount":15},
        {"Price":4725.96,"Amount":15},
        {"Price":4725.95,"Amount":15}]
}

Les dépôts correspondants ressemblent à ceci (voir les données réelles d'OKCoin) ; l'information de profondeur du marché dans le processus réel (voir les dépôts) change rapidement, les étudiants intéressés peuvent s'inscrire à OKCoin et se connecter pour voir.

img

Les données de marché ont de nombreuses utilisations, par exemple pour les menus de repas (bien sûr, il y a aussi des menus d'annonce).

function main() {    
    var depth = exchanges[0].GetDepth();    // 获取市场深度
    Log("depth:", depth);                   // 日志输出显示
    Log(exchanges[0].GetAccount());         // 输出 吃单前的 账户信息
    var buyPrice = depth.Asks[0].Price;     // 设置吃卖单的价格,即卖一,
                                            // 有时为确保吃单成功,这样处理:var buyPrice = depth.Asks[0].Price + slidePrice;
    var buyAmount = depth.Asks[0].Amount;   // 吃卖单的量
    exchanges[0].Buy(buyPrice, buyAmount);  // 执行买入操作, 吃掉卖一 这个单子
    Log(exchanges[0].GetAccount());         // 显示买入后的  账户信息,对比初始账户信息。可以对比出 买入操作的成交的数量。
}

Les résultats de l'exécution de l'analogue quantifié par l'inventeur:img


Plus de

le chien volantDeuxièmement, j'ai choisi l'hôte public américain et le bot n'avait pas ce symbole d'avertissement dans sa liste, mais quand il a été lancé, il n'y avait pas de message dans le journal, indiquant qu'il n'y avait pas d'informations dans le journal.

le chien volantPour compléter la découverte du problème: dans la liste des robots, l'état est le triangle rouge-orange avec un point d'exclamation, comme si c'était une indication d'exception.

le chien volantBonjour, je suis en train de tester une simulation avec la plate-forme, la première étape est de tester les informations de compte, aucune sortie de journal, des erreurs sont suggérées, je ne sais pas où est le problème? Le code de test du robot: fonction main (() { Log ((exchange.GetAccount (())); Log (("test"); Je ne sais pas. Le résultat: Le test 1 Stratégie: Test 1 (modifié le 13 septembre 2018 à 14:25:33) Date: Créé le 2018-09-13 14:07:57 Dernièrement commencé le 2018-09-13 14:40:24 Arrêté le 2018-09-13 14:40:25 Status: K ligne cycle 1 minute d'erreur hébergé en Chine: 42.236.82.38 - linux/amd64 (public), ID: 118025 Le site Web de l'entreprise est le suivant:

le chien volantBonjour, je suis en train de tester une simulation avec la plate-forme, la première étape est de tester les informations de compte, aucune sortie de journal, des erreurs sont suggérées, je ne sais pas où est le problème? Le code de test du robot: fonction main (() { Log ((exchange.GetAccount (())); Log (("test"); Je ne sais pas. Le résultat: Le test 1 Stratégie: Test 1 (modifié le 13 septembre 2018 à 14:25:33) Date: Créé le 2018-09-13 14:07:57 Dernièrement commencé le 2018-09-13 14:40:24 Arrêté le 2018-09-13 14:40:25 Status: K ligne cycle 1 minute d'erreur hébergé en Chine: 42.236.82.38 - linux/amd64 (public), ID: 118025 Le site Web de l'entreprise est le suivant:

hokshelatoL'appel `exchange.GetTicker()` est souvent utilisé lors de l'analyses, et **GetTicker: timeout** apparaît fréquemment.

Je vous en prie.Bonjour, les données de simulation en direct sont-elles des données en direct de l'échange?

- Je vous en prie.Je suis désolée.

Je vous en prie.Est-ce que exchange.GetDepth (()) renvoie toutes les données de l'échange en cours? Est-ce que cela ne renvoie qu'une partie des données parce qu'il y a trop d'échanges?

le maohbaoGetRecords ((Période) renvoie une histoire de ligne K, mais combien de barres de ligne K contient cette histoire de ligne K, et où est-ce spécifié?

PénélopeBon, je me suis trompé de clé, je l'ai corrigé.

PénélopeGetAccount: signature ne correspond pas Comment faire, mon frère?

C' est simple.Pourquoi l'amplitude de l'analogue est-elle toujours 15? L'amplitude est-elle une donnée passée ou générée au hasard? Si c'est une donnée passée, l'amplitude peut être valable.

Cjz140record est une fonction, length est un objet? depth est un objet? comment distinguer l'objet de la fonction? par exemple depth (Asks) (prix,amount)), où depth est un objet, asks est une matrice? price et amount sont des attributs?

FangBei est là.Quel est le slidePrice?

Le petit rêveSi vous avez des questions, vous pouvez les ajouter au groupe officiel de QQ @administrator.

le chien volantMerci pour toutes les réponses, j'ai suivi les conseils et j'essayerai de nouveau.

Le petit rêveJe ne sais pas si c'est un problème d'hôte public, vous pouvez tester avec un hôte privé, un hôte privé devrait être possible, vous pouvez en déployer un sur votre propre ordinateur.

Le petit rêveVous pouvez essayer avec votre propre hôte privé.

Le petit rêveCela peut être spécifique à la logique d'exécution de la stratégie, ou bien la stratégie fonctionne correctement, mais ne déclenche aucune action.

Le petit rêveSi vous avez un signe rouge, c'est que le robot est en train d'exécuter une erreur et que vous devez vérifier le journal du robot ou l'information du journal de l'administrateur.

Le petit rêveLes problèmes de réseau récents, en outre, sont obsolètes lorsque le disque d'analogie n'est pas mis à jour, et peuvent être ajustés en utilisant le mode d'acquisition du disque exchange.IO.

Le petit rêveLe simulateur de marché est un simulateur de marché qui fonctionne 24 heures sur 24 et qui suit le marché de plusieurs marchés traditionnels. Tous les utilisateurs du simulateur sont des participants de ce simulateur.

Je vous en prie.C'est très bien, merci.

Le petit rêveLes chiffres sont réels et les ventes et les achats sont réels.

Je vous en prie.Merci beaucoup. En outre, s'il vous plaît demander, lors de la simulation de niveau de disque réel d'analyses, exchange.GetDepth () renvoie des données compatibles avec BotVS ou des données historiques réelles?

Le petit rêveLe nombre de fichiers retournés. Voir l'interface API fournie par les échanges. Certains échanges renvoient plus, certains moins, et d'autres interfaces prennent en charge l'intégration en profondeur.

Le petit rêveIl n'est pas possible de spécifier le nombre de lignes K renvoyées par un échange spécifique. Le nombre de lignes K renvoyées peut varier d'un échange à l'autre.

Le petit rêveAu début, je me trompais aussi.

Le petit rêveEh bien, si on y réfléchit, il y a deux points principaux: - 1, la quantité de données en profondeur est si énorme, elle change à chaque seconde, et à une vitesse si rapide, que nous ne voyons que des morceaux de données. - 2, même si nous faisons des données de profondeur réelles, nous ne pouvons pas simuler avec précision les environnements de profondeur mince, car nous sommes les seuls participants à la retouche à ce moment-là et il n'y a pas d'autres participants. Mais nous allons essayer d'optimiser le plus proche possible de la réalité, merci pour les suggestions ^^

C' est simple.Les données profondes n'ont pas encore eu lieu et les courbes de prix ont eu lieu dans le passé. Les individus pensent que les données passées et futures sont plus fiables pour juger des achats et des ventes actuels. Il est fortement recommandé de noter les données profondes également.

Le petit rêveLes données de profondeur sont trop volumineuses. Si elles sont toutes enregistrées, il y en aura beaucoup. Les données de profondeur sont donc des valeurs analogiques, à l'exception du premier degré.

Le petit rêverecords est une variable utilisée pour recevoir les données de ligne K retournées par l'API GetRecords, longueur est l'attribut de longueur de la variable de type arithmétique dans le langage JS, qui représente la longueur de l'arrayé (c'est-à-dire le nombre d'éléments), et la profondeur est similaire à records est également une variable utilisée pour recevoir les données de profondeur retournées par la fonction GetDepth, les données de la structure des records, de la profondeur et du ticker peuvent être trouvées dans la documentation API.

Le petit rêveLes prix fluides, traduits un peu franchement, sont plus faciles à négocier pour un prix plus bas.