キーボードでエントリーしたい
cTraderではチャート中央のクイックトレードボタンで簡単にワンクリックエントリーが可能です。
ワンクリックエントリーはマウスを使ってるときは手軽で便利なのですが、キーボードに手を置いてるときはマウスまで手を伸ばさなければならないというひと手間がどうしても発生してしまいます。
例えばPCで別作業してるときにふとチャート見たくなってAlt+TabでWindow入れ替えてチャート見たら絶好のエントリーチャンスだった!なんてとき。キーボードからホットキー(ショートカットキー)で発注できたら便利だと思いませんか?
ホットキーで発注を
自分で書いてて「いやそんなことねーわ」とか思い始めてますが、今回はホットキーで発注と決済をするcBotを作ってみました。まぁ人によっちゃなんか役に立つこともあるかもしれませんし。
簡単なソースコードなので、cTrader4.0から追加されたホットキー機能のサンプルコードとしてもお使いいただけると思います。
HotkeyEntry
機能概要
cBotを起動させておくと、Sキーで売り注文、Bキーで買い注文、Cキーで全決済注文を出せます。確認も何もなくいきなり注文出されますので使ってみるときはご注意ください。全決済はそのチャートの通貨ペアのポジションに限ります。
デフォルトではキー単体で押しただけでエントリーしますが、CtrlやShiftなどと組み合わせた時のみ発動するようにModifierキーも指定できます。実運用する際はModifierキー指定推奨です。
Modifierキー指定なしでの起動しっぱなしは危険です。ちょっと目離したすきにネコがキーボードの上歩き回ったりしたら大惨事になりますから。
キーは自由に指定が可能です。他のcBotやcTrader本体が使っている組み合わせを指定すると、エラーメッセージ出て起動できないようになってます。起動できないときはキーを変更してください。
パラメータ
Volume
エントリーするボリュームを指定します。(ロットではなく通貨数で指定)
Modifier
CtrlとかAltとか組み合わせに使うキーを指定します。デフォルトはなし(None)。
BuyKey
買い注文に使うキーを指定します。
SellKey
売り注文に使うキーを指定します。
AllCloseKey
全決済注文に使うキーを指定します。
ダウンロード
ソースコード
短いので全文載せときます。
namespace cAlgo.Robots
{
[Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
public class HotKeyEntry : Robot
{
[Parameter(DefaultValue = 1000)]
public double Volume { get; set; }
[Parameter(DefaultValue = ModifierKeys.None)]
public ModifierKeys Modifier { get; set; }
[Parameter(DefaultValue = Key.B)]
public Key BuyKey { get; set; }
[Parameter(DefaultValue = Key.S)]
public Key SellKey { get; set; }
[Parameter(DefaultValue = Key.C)]
public Key AllCloseKey { get; set; }
protected override void OnStart() {
// --- 買いのホットキー登録
if (!Chart.AddHotkey(() => ExecuteMarketOrder(TradeType.Buy, SymbolName, Volume), BuyKey, Modifier)) {
Print("エラー:買いのホットキーが登録できません。別のcBotやシステムによって使用されています。");
Stop();
}
// --- 売りのホットキー登録
if(!Chart.AddHotkey(() =>ExecuteMarketOrder(TradeType.Sell, SymbolName, Volume), SellKey, Modifier)){
Print("エラー:売りのホットキーが登録できません。別のcBotやシステムによって使用されています。");
Stop();
}
// --- 全決済のホットキー登録
if (!Chart.AddHotkey(() => { foreach (var pos in Positions.Where(p => p.SymbolName == SymbolName)) ClosePositionAsync(pos); }, AllCloseKey, Modifier)) {
Print("エラー:全決済のホットキーが登録できません。別のcBotやシステムによって使用されています。");
Stop();
}
}
protected override void OnTick()
{
// Put your core logic here
}
protected override void OnStop()
{
// Put your deinitialization logic here
}
}
}
見てのとおり、コード本体はOnStartの中身のみ。買い、売り、決済それぞれのホットキーをAddHotKeyメソッドを使って登録しているだけです。
「チャートに対してホットキーを指定する」ため、Chartが持つAddHotKeyメソッドを呼び出す形になります。
AddHotKeyメソッドは第一引数に処理内容を指定します。ここではラムダ式を使って直接引数内に処理を書いてますが、別に引数なしのメソッド作っておいてメソッド名を渡してあげてもOKです。
protected override void OnStart() {
Chart.AddHotkey(Hogehoge, Key, Modifier);
}
private void Hogehoge() {
//ここに処理を書く
}
こんな感じで。こっちのが何してるかわかりやすいですね。
第2引数には使うキー、第3引数にCtrlなどの修飾キーを指定します。
なお、キー指定の仕方は別形式でも可能です。詳細はこの記事参照
-
KeyDownイベント【cAlgoAPI】
特定のキー押下で処理をする cTrader4.0でやっとできるようになりました。キーボードイベントの処理。これにより、自作インジケーターやcBot内でキーボードからいろんな処理を行わせることができます ...
続きを見る
メソッドが成功すると、cBot起動中は指定したキーを押すことで第一引数に渡した処理が呼び出されるようになります。
指定キーがすでに使われてたなどの理由でメソッドが失敗すると返り値としてfalseが返ってくるため、その場合はエラーメッセージを出してcBotを止めてます。
今回はエントリーにホットキーを利用しましたが、この第一引数部分を変えることによりどんな処理でも登録可能です。
cTrader4.0でホットキー機能が追加されたことにより、プログラム可能な処理は簡単にキーボードから呼び出すことが可能になりました。
プログラム自作派の方々はぜひホットキー機能を活用して理想のトレード環境を作り上げてみて下さい!
(2024/5/31 追記)
「ドテンしたい」というご要望があったため、最新フレームワークでのビルドしなおしがてら機能追加しましたので置いておきます。
cTrader4.2以降でご利用の方は下記からダウンロードしてください。