高周波取引は,迅速な取引実行と市場の微小構造に対する敏感な洞察に依存する挑戦的で競争的な分野である.その中でも注目されている戦略は,市場における"象"を微小で頻繁な利益を得るために利用することに焦点を当てたペニージャンプである.この記事では,ペニージャンプ戦略の仕組みを詳細に説明し,そのコードの細部を詳細に探究し,初心者がどのように動作するかを理解できるようにする.
株式市場では",象"は,一般に,大量に株を購入または売却したいが,市場価格で取引することを望まない機関投資家を指す.その代わりに,彼らは市場に大量に制限リスト,すなわち掲示板を掲示することを選択し,その意図を示す.この行為は,大規模な取引が市場に影響を及ぼす可能性があるため,市場で広く懸念されている.
例えば,ある株の市場深さは 200$1.01×1.03$ 200. そして,大象がやってきて, 3000株の1.01$の請求書を掛けたとします. この時点で,市場深さは 3,200$1.01×1.03$. 200です. これは,大象を引くような行為で,他の市場参加者の注目を集めます.
競争市場 高周波トレーダーの利益は,他のトレーダーの意図を推測するために,市場の微小構造を分析することから得られる.象が現れたら,高周波トレーダーは,微小な価格変動を入手するために迅速にポジションを確立する.彼らの目標は,短時間で頻繁に取引し,微小で累積的な利益を得ることです.
ゾウの困った状況 象は市場での大規模な操作を望むかもしれないが,彼らの行動は彼らの取引の意図を暴露し,高周波トレーダーの標的となる.高周波トレーダーは,前もってポジションを確立して価格変動から利益を得ようとします.象の市場での存在は競争市場の反応を引き起こし,それによって彼らの取引戦略に影響を与える可能性があります.
市場における詐欺 現実には,大型機関投資家は,市場で大量に買取・売却の申し込みを露骨に掲げないことが多い.そのような行動は,他の市場参加者が対策し,市場を操作する可能性があります.したがって,彼らは,高周波トレーダーを誘導し,価格変動から利益を得るために迅速に売ったり,購入したりするための偽造戦略を採用する可能性があります.
ペニージャンプ戦略の核心思想は,市場に象が現れ,特定の価格 (例えば$1.01) をサポートすると,高周波トレーダーは迅速にオファーを1セント上昇させ,例えば$1.02に上げるというものである.これは,高周波トレーダーが象が現れ,この価格が強い買い手サポートを意味することを理解しているため,価格が上昇することを期待して,それに追随しようと試みるからである.価格が$1.03 x $1.05に上昇すると,高周波トレーダーは迅速に売却して$0.01の利益を得ることができる.
それだけでなく,高周波トレーダーは,価格が上昇していない場合でも,購入後に利益を得ることができます. 彼らは,象が底値を支持していることを知っているので,小差で利益を得るために,すぐにその象に株を売却することができます.
戦略のソースコード:https://www.fmz.com/strategy/358
上記の戦略コードは,ペニージャンプ戦略を実装するための例です. 以下は,初心者がどのように動作するかを理解するためのコードの詳細な説明です:
var Counter = {
i: 0,
w: 0,
f: 0
};
// Variables
var InitAccount = null;
function CancelAll() {
while (true) {
var orders = _C(exchange.GetOrders);
if (orders.length == 0) {
break;
}
for (var i = 0; i < orders.length; i++) {
exchange.CancelOrder(orders[i].Id);
}
Sleep(Interval);
}
}
function updateStatus(msg) {
LogStatus("调戏次数:", Counter.i, "成功:", Counter.w, "失败:", Counter.f, "\n"+msg+"#0000ff\n"+new Date());
}
function main() {
if (DisableLog) {
EnableLog(false);
}
CancelAll();
InitAccount = _C(exchange.GetAccount);
Log(InitAccount);
var i = 0;
var locks = 0;
while (true) {
Sleep(Interval);
var depth = _C(exchange.GetDepth);
if (depth.Asks.length === 0 || depth.Bids.length === 0) {
continue;
}
updateStatus("搜索大象中.... 买一: " + depth.Bids[0].Price + ", 卖一:" + depth.Asks[0].Price + ", 锁定次数: " + locks);
var askPrice = 0;
for (i = 0; i < depth.Asks.length; i++) {
if (depth.Asks[i].Amount >= Lot) {
askPrice = depth.Asks[i].Price;
break;
}
}
if (askPrice === 0) {
continue;
}
var elephant = null;
// skip Bids[0]
for (i = 1; i < depth.Bids.length; i++) {
if ((askPrice - depth.Bids[i].Price) > ElephantSpace) {
break;
}
if (depth.Bids[i].Amount >= ElephantAmount) {
elephant = depth.Bids[i];
break;
}
}
if (!elephant) {
locks = 0;
continue;
}
locks++;
if (locks < LockCount) {
continue;
}
locks = 0;
updateStatus("调戏大象中....大象在第" + i + "档, " + JSON.stringify(elephant));
exchange.Buy(elephant.Price + PennyTick, Lot, "Bids[" + i + "]", elephant);
var ts = new Date().getTime();
while (true) {
Sleep(CheckInterval);
var orders = _C(exchange.GetOrders);
if (orders.length == 0) {
break;
}
if ((new Date().getTime() - ts) > WaitInterval) {
for (var i = 0; i < orders.length; i++) {
exchange.CancelOrder(orders[i].Id);
}
}
}
var account = _C(exchange.GetAccount);
var opAmount = _N(account.Stocks - InitAccount.Stocks);
if (opAmount < 0.001) {
Counter.f++;
Counter.i++;
continue;
}
updateStatus("买单得手: " + opAmount +", 开始出手...");
exchange.Sell(elephant.Price + (PennyTick * ProfitTick), opAmount);
var success = true;
while (true) {
var depth = _C(exchange.GetDepth);
if (depth.Bids.length > 0 && depth.Bids[0].Price <= (elephant.Price-(STTick*PennyTick))) {
success = false;
updateStatus("没有得手, 开始止损, 当前买一: " + depth.Bids[0].Price);
CancelAll();
account = _C(exchange.GetAccount);
var opAmount = _N(account.Stocks - InitAccount.Stocks);
if (opAmount < 0.001) {
break;
}
exchange.Sell(depth.Bids[0].Price, opAmount);
}
var orders = _C(exchange.GetOrders);
if (orders.length === 0) {
break;
}
Sleep(CheckInterval);
}
if (success) {
Counter.w++;
} else {
Counter.f++;
}
Counter.i++;
var account = _C(exchange.GetAccount);
LogProfit(account.Balance - InitAccount.Balance, account);
}
}
戦略コードの仕組みを詳しく理解するために,あなたが提供した戦略コードを段階的に解析します.
var Counter = {
i: 0,
w: 0,
f: 0
};
このコードは,Counterと呼ばれるオブジェクトを初期化し,戦略を追跡するための取引統計情報を使用します.具体的には,以下の3つの属性を含みます.
これらの属性は,ポリシー実行中に記録され更新されます.
var InitAccount = null;
このコードの行は,InitAccountという変数を初期化し,ポリシーが実行開始時にアカウント情報を保存します.
function CancelAll() {
while (true) {
var orders = _C(exchange.GetOrders);
if (orders.length == 0) {
break;
}
for (var i = 0; i < orders.length; i++) {
exchange.CancelOrder(orders[i].Id);
}
Sleep(Interval);
}
}
都市部でCancelAll()
市場でのすべての未完成の注文をキャンセルする機能です.
while (true)
: これは無限のサイクルであり,未完成の注文がないまで実行し続けます.var orders = _C(exchange.GetOrders)
:这一行代码使用exchange.GetOrders函数获取当前账户所有挂出的订单,并将它们存储在orders变量中。if (orders.length == 0)
: このコード行は未完了の注文があるかどうかをチェックします. もし orders アレイの長さが 0 であれば,未完了の注文がないことを意味します.for (var i = 0; i < orders.length; i++)
: これは,すべての未完成の注文を横断する for ループである.exchange.CancelOrder(orders[i].Id)
: このコード行は,exchange.CancelOrder ((() 機能を使用して,注文のIDで各注文をキャンセルします.Sleep(Interval)
:このコード行は,注文のキャンセル操作があまりにも頻繁でないことを確認するために,しばらく (ミリ秒単位で) 待つ待機サイクルを導入します.この機能の目的は,主方針の実行に干渉しないように,主方針を実行する前に未完了の注文が存在しないことを確認することです.
function updateStatus(msg) {
LogStatus("调戏次数:", Counter.i, "成功:", Counter.w, "失败:", Counter.f, "\n" + msg + "#0000ff\n" + new Date());
}
都市部でupdateStatus(msg)
取引状態の情報を更新し記録する機能である. それはmsgパラメータを受け取り,通常,現在の市場状態に関する情報を含んでいる. 関数の具体的な操作には以下が含まれます.
使用するLogStatus()
機能は,ポリシーを実行するときに状態バーに表示される情報を記録する. それは取引回数,成功回数,失敗回数に関するテキストを表示する.
追加しました.msg
市場状況に関する情報を含むパラメータ.
追加された現在の時間帯 ((new Date()
タイム情報を表示します.
この機能の目的は,戦略の実行中に監視と分析を行うために,取引状態情報を記録し更新することです.
function main() {
if (DisableLog) {
EnableLog(false);
}
CancelAll();
InitAccount = _C(exchange.GetAccount);
Log(InitAccount);
var i = 0;
var locks = 0;
while (true) {
Sleep(Interval);
var depth = _C(exchange.GetDepth);
if (depth.Asks.length === 0 || depth.Bids.length === 0) {
continue;
}
updateStatus("搜索大象中.... 买一: " + depth.Bids[0].Price + ", 卖一:" + depth.Asks[0].Price + ", 锁定次数: " + locks);
var askPrice = 0;
for (i = 0; i < depth.Asks.length; i++) {
if (depth.Asks[i].Amount >= Lot) {
askPrice = depth.Asks[i].Price;
break;
}
}
if (askPrice === 0) {
continue;
}
var elephant = null;
// skip Bids[0]
for (i = 1; i < depth.Bids.length; i++) {
if ((askPrice - depth.Bids[i].Price) > ElephantSpace) {
break;
}
if (depth.Bids[i].Amount >= ElephantAmount) {
elephant = depth.Bids[i];
break;
}
}
if (!elephant) {
locks = 0;
continue;
}
locks++;
if (locks < LockCount) {
continue;
}
locks = 0;
updateStatus("调戏大象中....大象在第" + i + "档, " + JSON.stringify(elephant));
exchange.Buy(elephant.Price + PennyTick, Lot, "Bids[" + i + "]", elephant);
var ts = new Date().getTime();
while (true) {
Sleep(CheckInterval);
var orders = _C(exchange.GetOrders);
if (orders.length == 0) {
break;
}
if ((new Date().getTime() - ts) > WaitInterval) {
for (var i = 0; i < orders.length; i++) {
exchange.CancelOrder(orders[i].Id);
}
}
}
var account = _C(exchange.GetAccount);
var opAmount = _N(account.Stocks - InitAccount.Stocks);
if (opAmount < 0.001) {
Counter.f++;
Counter.i++;
continue;
}
updateStatus("买单得手: " + opAmount +", 开始出手...");
exchange.Sell(elephant.Price + (PennyTick * ProfitTick), opAmount);
var success = true;
while (true) {
var depth = _C(exchange.GetDepth);
if (depth.Bids.length > 0 && depth.Bids[0].Price <= (elephant.Price-(STTick*PennyTick))) {
success = false;
updateStatus("没有得手, 开始止损, 当前买一: " + depth.Bids[0].Price);
CancelAll();
account = _C(exchange.GetAccount);
var opAmount = _N(account.Stocks - InitAccount.Stocks);
if (opAmount < 0.001) {
break;
}
exchange.Sell(depth.Bids[0].Price, opAmount);
}
var orders = _C(exchange.GetOrders);
if (orders.length === 0) {
break;
}
Sleep(CheckInterval);
}
if (success) {
Counter.w++;
} else {
Counter.f++;
}
Counter.i++;
var account = _C(exchange.GetAccount);
LogProfit(account.Balance - InitAccount.Balance, account);
}
}
これは戦略の主要な実行機能ですmain()
戦略の核心的な論理を含んでいる. その仕組みを一行一行説明しましょう.
if (DisableLog)
: このコード行は,DisableLog 変数が true であることを確認し,もしそうなら,ログの記録を無効にする.これは,ポリシーが不要なログを記録しないことを確認するためである.
CancelAll()
: 前に説明したCancelAll (●) 関数を呼び出し,未完成の注文がないことを確認します.
InitAccount = _C(exchange.GetAccount)
: このコードは,現在のアカウントの情報を取得し,InitAccount変数に保存します. これは,ポリシーが実行開始時にアカウントの状態を記録するために使用されます.
var i = 0;
そしてvar locks = 0;
: i と locks の2つの変数を初期化し,次の戦略論理で使用します.
while (true)
: これは無限の循環であり,戦略の継続的な実行のために使用されています.
線形で説明します.while (true)
ループ内の主要な戦略論理は,
while (true) {
Sleep(Interval);
var depth = _C(exchange.GetDepth);
if (depth.Asks.length === 0 || depth.Bids.length === 0) {
continue;
}
updateStatus("搜索大象中.... 买一: " + depth.Bids[0].Price + ", 卖一:" + depth.Asks[0].Price + ", 锁定次数: " + locks);
Sleep(Interval)
: このコード行は,ポリシーの実行頻度を制御するために,ポリシーの休眠時間を設定します. Interval パラグラムは,休眠時間の間隔を定義します (ミリ秒単位で).
var depth = _C(exchange.GetDepth)
詳細な情報を得る:現在の市場深度情報,包括して売り込み・買い込みの価格と数量. この情報は深度変数に保存されます.
if (depth.Asks.length === 0 || depth.Bids.length === 0)
:このコード行は,市場深度情報をチェックし,セールとオーダーの両方が存在することを確認します. どちらかが存在しない場合,市場は十分な取引情報がない可能性があることを示します.
updateStatus("搜索大象中.... 买一: " + depth.Bids[0].Price + ", 卖一:" + depth.Asks[0].Price + ", 锁定次数: " + locks)
: このコード行は,update Status関数,更新方針の状態情報を呼び出します. これは,購入価格,売却価格,および以前にロックされた回数 (locks) を含む現在の市場の状態を記録します.
var askPrice = 0;
for (i = 0; i < depth.Asks.length; i++) {
if (depth.Asks[i].Amount >= Lot) {
askPrice = depth.Asks[i].Price;
break;
}
}
if (askPrice === 0) {
continue;
}
var elephant = null;
var askPrice = 0;
条件を満たした販売単位の価格を保存するために使用される askPrice 変数を初期化します.
for (i = 0; i < depth.Asks.length; i++)
商品の価格や量に関する情報を市場中に流通させるためのforループです.
if (depth.Asks[i].Amount >= Lot)
: ループの中で,各セールスの数が指定されたLot (手数) よりも多いか等しいかをチェックします.そうであれば,そのセールスの価格をaskPriceに保存し,ループを終了します.
if (askPrice === 0)
:条件を満たす売り札が見つからない場合 (askPriceは0のまま),ポリシーは待機を続け,次の操作をスキップします.
var elephant = null;
: 初期化されたエレファント変数で,象
for (i = 1; i < depth.Bids.length; i++) {
if ((askPrice - depth.Bids[i].Price) > ElephantSpace) {
break;
}
if (depth.Bids[i].Amount >= ElephantAmount) {
elephant = depth.Bids[i];
break;
}
}
if (!elephant) {
locks = 0;
continue;
}
locks++;
if (locks < LockCount) {
continue;
}
locks = 0;
市場での入札の価格と数値の情報を探し続けて,最初の入札 (Bids[0]) をスキップします.
if ((askPrice - depth.Bids[i].Price) > ElephantSpace)
:現在の購買価格とアスク価格の差がElephantSpaceよりも大きいかどうかをチェックします.そうであれば,ゾウの
if (depth.Bids[i].Amount >= ElephantAmount)
: 現在の決済の数が ElephantAmount よりも大きいか等しいかをチェックし,そうであれば,その決済情報を elephant 変数に保存します.
if (!elephant)
:
locks++:
if (locks < LockCount)
: 要求されたロック数 (LockCount) が満たされているか確認します. 要求されていない場合は,待機します. updateStatus("调戏大象中....大象在第" + i + "档, " + JSON.stringify(elephant));
exchange.Buy(elephant.Price + PennyTick, Lot, "Bids[" + i + "]", elephant);
var ts = new Date().getTime();
while (true) {
Sleep(CheckInterval);
var orders = _C(exchange.GetOrders);
if (orders.length == 0) {
break;
}
if ((new Date().getTime() - ts) > WaitInterval) {
for (var i = 0; i < orders.length; i++) {
exchange.CancelOrder(orders[i].Id);
}
}
}
updateStatus("调戏大象中....大象在第" + i + "档, " + JSON.stringify(elephant))
: update Status を呼び出し,現在のポリシー状態を記録し,見つかったオオカミの位置や関連する情報を記録します.これはポリシーの状態バーに表示されます.
exchange.Buy(elephant.Price + PennyTick, Lot, "Bids[" + i + "]", elephant)
購入価格はelephant.Price + PennyTickで,購入量はLotで,購入操作は"Bids["+i+
var ts = new Date().getTime()
:現在の時間の時間軸を取得し,後の計算の時間間隔を設定します.
while (true)
象
Sleep(CheckInterval)
策略は,注文状態のチェックの頻度を制御するために,一時休眠します.
var orders = _C(exchange.GetOrders)
オンラインショップで購入した商品の詳細はこちら.
if (orders.length == 0)
:未完成の注文がないかチェックし,ない場合はループを跳ね出します.
(new Date().getTime() - ts) > WaitInterval
:現在の時間とオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオニオ
for (var i = 0; i < orders.length; i++)
オーダーが完了していないすべての注文をチェックします.
exchange.CancelOrder(orders[i].Id)
:使用exchange.CancelOrder函数取消每个未完成的订单。
var account = _C(exchange.GetAccount);
var opAmount = _N(account.Stocks - InitAccount.Stocks);
if (opAmount < 0.001) {
Counter.f++;
Counter.i++;
continue;
}
updateStatus("买单得手: " + opAmount + ", 开始出手...");
exchange.Sell(elephant.Price + (PennyTick * ProfitTick), opAmount);
var success = true;
while (true) {
var depth = _C(exchange.GetDepth);
if (depth.Bids.length > 0 && depth.Bids[0].Price <= (elephant.Price - (STTick * PennyTick))) {
success = false;
updateStatus("没有得手, 开始止损, 当前买一: " + depth.Bids[0].Price);
CancelAll();
account = _C(exchange.GetAccount);
var opAmount = _N(account.Stocks - InitAccount.Stocks);
if (opAmount < 0.001) {
break;
}
exchange.Sell(depth.Bids[0].Price, opAmount);
}
var orders = _C(exchange.GetOrders);
if (orders.length === 0) {
break;
}
Sleep(CheckInterval);
}
if (success) {
Counter.w++;
} else {
Counter.f++;
}
Counter.i++;
var account = _C(exchange.GetAccount);
LogProfit(account.Balance - InitAccount.Balance, account);
}
var account = _C(exchange.GetAccount)
ブログのページをご覧下さい.
var opAmount = _N(account.Stocks - InitAccount.Stocks)
購入後口座の資産変化を計算する. 変化が0.001未満である場合は,購入が失敗すると表示し,失敗回数を増加させ,次のサイクルを継続します.
updateStatus("买单得手: " + opAmount + ", 开始出手...")
象牙の購入の成功例を記録し,購入数も記録します.
exchange.Sell(elephant.Price + (PennyTick * ProfitTick), opAmount)
エレファント.Price + (PennyTick * ProfitTick) で販売する.
販売注文の実行を待機する新しい無限循環に入ります.
var depth = _C(exchange.GetDepth)
市場に関する深層の情報を得る.
if (depth.Bids.length > 0 && depth.Bids[0].Price <= (elephant.Price - (STTick * PennyTick)))
市場深度情報をチェックし,市場価格が停止価格に下落している場合は停止操作を実行します.
CancelAll()
: CancelAll (すべての注文をキャンセル) を呼び出し,未完了の注文をすべてキャンセルします.
if (opAmount < 0.001)
: 購入数を再確認します. 0.001未満の場合,購入が失敗し,ループを跳ね出します.
exchange.Sell(depth.Bids[0].Price, opAmount)
ストップ損失操作を実行し,現在の市場最低価格で残った資産を売却する.
最後に,取引が成功するか否かによって,成功回数と失敗回数を更新し,取引の利益を記録します.
この戦略の基本理念は,市場で大金を払って,小利益を得るために買ったり売ったりすることである.これは,購入量 (Lot),誤り再試の間隔 (Interval),大象量 (ElephantAmount),大象距離 (ElephantSpace) など,いくつかの重要なパラメータを組み,戦略の行動を調整する.
一般的には,この戦略は,市場の深度情報を利用し,大量に支払いを識別し,短時間で売買を行うことを目的とした高周波取引戦略である.しかし,これはまた,市場変動に迅速に反応し,重大な損失を避けるためにリスク管理とストップ損失メカニズムを検討する必要があるため,非常にリスクの高い戦略である.
この戦略は,特定の市場や取引プラットフォームに基づいているので,異なる市場や取引所に対して適切な調整と最適化が必要かもしれないことに注意してください.実用的な応用では,投資家は戦略のパフォーマンスを慎重にテストし,評価し,投資目標とリスク承受性に適合していることを確認する必要があります.
実行する際に,次の操作をループで実行します.
1 戦略は,まず,市場の深層情報を調査し,現在の売り買い状況を理解します.
2、次に,策略は,条件付きのセールスを探そうとする.条件は,セールスの数がLot (手数) よりも多く,またはそれと同等である.条件付きのセールスが見つかった場合,セールスの価格をaskPriceとして記録する.
3、その後,策略は
4, 連続して十分な数の
5. 次に,この戦略は,新しい無限回路に続きます. この回路では,次の操作を実行します.
この戦略は,上記の操作を繰り返し繰り返して,できるだけ多くの
ペニージャンプ戦略は,高周波取引における典型的な例であり,市場参加者の間での微妙なギャンブルと競争を示している.仮想通貨市場では,この戦略は特に顕著で,市場は波動が大きく,機関投資家や高周波トレーダーは,迅速な利益を追求している.しかし,これは市場も課題に満ちており,競争優位性を維持するために常に適応し調整する戦略を必要としている.この激烈な競争の世界では,市場微細構造をよく理解し,迅速に反応するトレーダーだけが成功する.