初心者のデジタル通貨量化取引戦略設計には,しばしばさまざまな戦略的ニーズがあり,その言語やプラットフォームによって異なる状況の戦略設計ニーズが遇されます.例えば,時には複数の輪が必要であり,時には複数のプラットフォームのヘッジが必要であり,時にはさまざまな取引が必要になります.以下の戦略のニーズを実現するいくつかの設計経験を共有します. 学習プラットフォームは発明者の定量化取引プラットフォームを使用しています.https://www.fmz.comデジタル通貨市場として市場が選択した.
このような需要は,多種トレンド戦略,多種格子戦略などの記述が必要であり,戦略論理をターゲットにして,異なる取引で市場を繰り返す必要がある. デザインは通常こうです:
function Process (symbol) {
exchange.IO("currency", symbol)
var ticker = _C(exchange.GetTicker)
Log("已经切换交易对,按照策略逻辑处理交易对 :", symbol, "行情:", ticker)
// ...
// ..
// .
}
function main(){
var symbols = ["BTC_USDT", "LTC_USDT", "ETH_USDT"]
while (true) {
for (var i = 0 ; i < symbols.length; i++) {
Process(symbols[i])
Sleep(500)
}
}
}
ロボットに配置する:
この方法では,ロボットに取引所のオブジェクトを配置し,取引対を切り替えて,異なる取引対の市場を取得し,多種多様な市場を実行し,戦略的論理の下で実行することが実現されています. 定義した3つの取引対であるBTC_USDT,LTC_USDT,ETH_USDTは,循環の中で順番に繰り返し市場を取得し,市場を取得すると,市場検知に特化した戦略を設計した取引論理を触発することができます.
交替は難しいし,戦略も明瞭ではない. 交替は難しい. 交替は難しい. デザインの他の方法もありますが,次の方法です.
複数の取引所のオブジェクトを介して異なる取引対の市場データを取得し,反復戦略論理で実行する. 例えば,ロボットに3つの交換オブジェクトを配置し,取引ペアをそれぞれBTC_USDT,LTC_USDT,ETH_USDTに設定します.
"OKEX現金V3テスト"の取引所オブジェクトは,コントロールセンター,取引所の設定ページで:設定は完了しました.
このとき,ボットに複数の取引点を追加したので,コードを変更してください. BTC_USDT,LTC_USDT,ETH_USDTの取引点です.
function Process (e) {
var ticker = _C(e.GetTicker)
Log("交易所", e.GetName(), "按照策略逻辑处理交易对 :", e.GetCurrency(), "行情:", ticker)
// ...
// ..
// .
}
function main(){
while (true) {
for (var i = 0 ; i < exchanges.length; i++) {
Process(exchanges[i])
Sleep(500)
}
}
}
ロボット:
上記の例は,取引対を切り替えるか,複数の異なる取引対の取引所オブジェクトを1つの設定アカウントに追加するかのどちらかである. 取引所のアカウントの配置を"つだけ使っている (良い取引所の配置を使用している) ならば,複数の取引所のアカウントを"つの戦略でどのように使うのか?
いくつかの戦略は,例えば,マルチ取引所のクロスマーケットヘッジ,単一の取引所のマルチアカウント戦略などである.
複数の取引所が配置されているが,異なる取引所である.例えば,私がコントロールセンター -> 取引所 -> 取引所を追加するページで2つの取引所を設定しました. この2つの取引所で設定されたアカウントの資産情報にアクセスできます.
function main(){
Log(exchanges[0].GetAccount()) // 打印第一个 交易所对象的账户资产信息,即火币期货 这个交易所的资产信息。
Log(exchanges[1].GetAccount()) // ... 打印Bit-Z这个交易所的资产信息
}
もちろん,私は2つ目,または3つ目のアカウントの交換設定を1つの取引所に追加することができます.
複数の取引所が配置され,同じ取引所である.
例えば,トークンフューチャーアカウントを追加します.
この2つの"トークンフューチャー"取引所のアカウントを配置しているのがわかります.
戦略作成時に,ボットの"設定を変更する"オプションには,またトークン先物件が表示されます.
例えば,この方法では,2つのアカウントに1つの"先売り先買い"戦略 (上) と1つの"先買い先売り"戦略 (下) を設定できます.
ロボットに複数の取引所オブジェクトを配置するとの違いと"同じ取引所アカウントでロボットに複数の取引所オブジェクトを配置する"の違いについて説明します.
この急激な例は",同じ取引所のアカウントで複数の取引所のオブジェクトをロボットに配置する"という例と少し似ていますが,違いはあります. 上記の例は,取引所の配置で異なります.
ロボットで取引所を配置する際には,常に以下のようなものを使います.この配置は.
取引の設定は,ただ取引所のオブジェクトを追加するだけで異なります. GetAccount を呼び出すと,常に同じアカウントの資産情報にアクセスできます.
しかし:このように配置された2つのトークンは,トークンフューチャーであるにもかかわらず,異なる取引所のアカウントを代表する.
時には,デジタル通貨の契約をヘッジする戦略では,瞬時に消える取引機会を掴むために,多くのシナリオで同時発注が必要になります. しかし,契約が異なるため,市場を取得し,市場を操作する際に対応する契約に切り替える必要があります. 交換.Go関数を同時実行し,単一の関数または市場を入手する際に,同期の問題があるため,それほど速くありません. そして,そのようなスイッチ契約のデザインは論理的にそれほど簡潔ではありません. より良い方法がありますか?
もちろん,方法があります! 上記のように"同じ取引所のアカウントで複数の取引所のオブジェクトをロボットに設定する"ように,ロボットに2つの取引所のオブジェクトを追加することができます.取引所の設定を使用して,交換オブジェクトを追加します. 提示ボックスがポップアップします.取引所アカウントの設定は,同じ通貨,取引対の取引所オブジェクトを追加することはできません.
戦略ロボットが2つの取引所用品と取引所用品にリンクされた1つの取引所アカウントコードを 使うことはできませんか? 解決法がある!
"コントロールセンター" -> "取引所"で,OKEXの先物取引所設定を追加しました.
設定が完了したら保存をクリックします.
市民の関心は,この問題についてです. デザインは簡単で,戦略は簡単です.
function main(){
exchanges[0].SetContractType("quarter") // 设置第一个添加的交易所对象 当前的合约为季度合约
exchanges[1].SetContractType("this_week") // 设置第二个添加的交易所对象,当前的合约为当周合约
while (true) {
var beginTime = new Date().getTime() // 记录这次获取行情时起始的时间戳。
var rA = exchanges[0].Go("GetTicker") // 创建并发 线程去获取 第一个交易所对象,也就是季度合约的行情数据。
var rB = exchanges[1].Go("GetTicker") // 创建并发 线程去获取 第二个交易所对象,也就是当周合约的行情数据。
var tickerA = rA.wait() // 并发的两个线程各自执行自己的任务,这里等待获取数据,A 等待时,B任务也在执行。
var tickerB = rB.wait() // 所以这里看似是顺序执行,实际在底层是并发的。只不过获取的时候是顺序先获取A,在获取B。
var endTime = new Date().getTime() // 记录并发获取两个合约行情结束时的时间戳。
if (tickerA && tickerB) { // 如果获取的数据没有问题,执行以下逻辑。
var diff = tickerA.Last - tickerB.Last // 计算差价
$.PlotLine("diff", diff) // 使用画线类库把差价画在图表上。
if (diff > 500) { // 如果差价大于500, 对冲套利(当然设置500 的差价是比较大的,很少见。)
// 对冲
rA = exchanges[0].Go("Sell", tickerA.Buy, 1) // 并发线程创建 季度合约下卖单
rB = exchanges[1].Go("Buy", tickerB.Sell, 1) // 并发线程创建 当周合约下买单
var idA = rA.wait() // 等待 返回下单结果,返回的是订单ID
var idB = rB.wait() // ...
}
// ...
}
LogStatus(_D(), "并发获取两个合约行情耗时:", endTime - beginTime, "毫秒。") // 显示在状态栏上时间,以便知道程序在执行。
Sleep(500)
}
}
デザイン戦略は,単純に感じられ,考えが明確になる.
リアルディスク:
取引先は,取引先の取引先と取引先の取引先の間の距離を測ります.
努力して量化この最後の方法は素晴らしいです
ブクシアック素晴らしい,これはとても役に立っています!