IB証券TWSのAPIドミトリーFAQ:スキャナ、基本仕様、過去データ制約、IBゲートウェイ

こちらはインタラクティブブローカーズのAPI情報、Dmitry's TWS API FAQを日本語に訳したものです。元のウェブページの量が多すぎて閲覧しにくい&元サイトを翻訳にかけるとPCが固まるため、備忘録用に章ごとに分けつつ、できる範囲で変な訳を修正して保存しています。 

目次

TWSスキャナ

[Q] スキャナーはどこから始めればよいですか?

[A] ApiDemo プログラムの [Market Data] タブにある [Market Scanner] 項目を確認してください。これで良いスタートが切れます。 

[Q] オープン以来最大の値上がり者は5ドルから10ドルの間でしたか?

5ドルから10ドルの間でオープン以来最大の値上がり者を取り戻そうとしています。

 TWS ではこれを正常に返しましたが、API ではまったく同じ結果を得ることができません。以下は私のコードで、次にコピーしようとしているTWSスキャナーファイルです。ここで何が足りないのでしょうか?ありがとう!

スキャナーの作成:

ScannerSubscription scan = new ScannerSubscription();

            scan.scanCode("TOP_OPEN_PERC_GAIN");

            scan.instrument("STK");

            scan.locationCode("STK.US.MAJOR");

            scan.belowPrice(10);

            scan.numberOfRows(10);

            

            m_client.reqScannerSubscription(0, scan);

Output method:

public void scannerData(int reqId, int rank, ContractDetails contractDetails, String distance, String benchmark, String projection, String legsStr) {

            System.out.println(contractDetails.m_marketName + " " + reqId + " " + rank + " " + distance + " " + benchmark + " " + projection + " " + legsStr);

    }

The TWS file:

<?xml version="1.0" encoding="UTF-8"?>

<ScannerTemplate autoRefresh="true">

        <ScannerContent varName="content" version="0" watermarkWhenEmpty="false" pageId="1385043649" transferableParameter="true" locationText="STK.US.MAJOR" statsExchText="ALL" maxItems="-1" snapshot="-1" paused="false" scannerSent="true" chartDividerLocation="0">

                <ExtendedConfigurationMap varName="extendedConfiguration"/>

                <scannerName></scannerName>

                <Instrument varName="instrument" name="US Stocks" m_type="STK" filters="PRICE,PRICE_USD,VOLUME,VOLUME_USD,AVGVOLUME,AVGVOLUME_USD,HALTED,UNSHORTABLE,SHORTSALERESTRICTED,NUMSHARESSHORT,SHORTOFFLOATPERC,DAYSTOCOVER,NUMSHARESINSIDER,INSIDEROFFLOATPERC,NUMSHARESINSTITUTIONAL,INSTITUTIONALOFFLOATPERC,OPTVOLUME,AVGOPTVOLUME,OPTVOLUMEPCRATIO,IMPVOLAT,IMPVOLATOVERHIST,MKTCAP,MKTCAP_USD,STKTYPE,PILOT,DIVIB,DIVYIELDIB,NEXTDIVDATE,NEXTDIVAMOUNT,HISTDIVIB,HISTDIVYIELDIB,GROWTHRATE,PERATIO,QUICKRATIO,DIVYIELD,RETEQUITY,PRICE2BK,PRICE2TANBK,CHANGEPERC,AFTERHRSCHANGEPERC,CHANGEOPENPERC,OPENGAPPERC,PRICERANGE,IMBALANCE,IMBALANCEADVRATIOPERC,REGIMBALANCE,REGIMBALANCEADVRATIOPERC,AVGRATING,NUMRATINGS,AVGPRICETARGET,NUMPRICETARGETS,AVGTARGET2PRICERATIO,TRADECOUNT,TRADERATE,VOLUMERATE,SIC,INDEX_COMPARISON,FIRSTTRADEDATE,HASOPTIONS" group="STK.GLOBAL" shortName="US"/>

                <ScanType varName="parameter" displayName="Top % Gainers Since Open" scanCode="TOP_OPEN_PERC_GAIN" instruments="STK,STOCK.NA,STOCK.EU,STOCK.HK,FUT.US,FUT.HK,FUT.EU,FUT.NA" absoluteColumns="false" supportsSorting="true" respSizeLimit="#" snapshotSizeLimit="250" feature="PCT" searchDefault="false" access="allowed">

                        <Columns varName="columns">

                                <Column colId="55" name="Change Since Open" display="true" section="m">

                                        <displayType>DATA</displayType>

                                </Column>

                                <ColumnSetRef colId="0" name="BA" display="false">

                                        <displayType>DATA</displayType>

                                </ColumnSetRef>

                                <Column colId="48" name="Time in Scan" display="true">

                                        <displayType>DATA</displayType>

                                </Column>

                        </Columns>

                </ScanType>

                <SettingValueList varName="settingList">

                        <SettingValue settingCode="annualVolatility" value="true"/>

                </SettingValueList>

                <AdvancedFilter varName="filter">

                        <priceAbove>5</priceAbove>

                        <priceBelow>10</priceBelow>

                </AdvancedFilter>

        </ScannerContent>

        <ArString varName="fullySelectedNodesList">

                <String>STK.US.MAJOR</String>

        </ArString>

        <Columns varName="tickerColumns" type="jcolumn.TickerColumns">

                <ContractSingleDescColumn colId="99" width="176" alignment="2" fg="-1" bg="-16777216" uniqueId="0" maxSymbolWidth="0" overrideBg="false" overrideFg="false"/>

                <ChangeSinceOpenColumn colId="55" width="172" alignment="4" fg="-1" bg="-16777216" uniqueId="0" maxSymbolWidth="0" overrideBg="false" overrideFg="false" showPercent="true"/>

                <LastPriceColumn colId="7" width="188" alignment="4" fg="-1" bg="-16777216" uniqueId="0" maxSymbolWidth="0" overrideBg="false" overrideFg="false" prohibitDynamicColors="false"/>

                <BidPriceColumn colId="4" width="188" alignment="4" fg="-1" bg="-16777216" uniqueId="0" maxSymbolWidth="0" overrideBg="false" overrideFg="false" prohibitDynamicColors="false"/>

                <AskPriceColumn colId="5" width="256" alignment="4" fg="-1" bg="-16777216" uniqueId="0" maxSymbolWidth="0" overrideBg="false" overrideFg="false" prohibitDynamicColors="false"/>

                <InScanTimeColumn colId="48" width="256" alignment="4" uniqueId="0" maxSymbolWidth="0" overrideBg="false" overrideFg="false"/>

        </Columns>

</ScannerTemplate>


ああ、スキャナーを作成すると、次のような行が表示されるはずです。

scan.abovePrice(5);

なぜコピーされなかったのかわかりません。

[Q] マーケットスキャナー市場時間前/市場時間後

[A] by ジョシュ

2021 年 12 月 18 日に追加

引用元: https://groups.io/g/twsapi/topic/29078601#41570

こんにちは、ニックさん

 

API では利用できないスキャン結果を TWS Advanced Market Scanner で受け取った場合、結果にTWS を通じて取引できない契約が含まれていることが原因である可能性があります。 TWS Advanced Market Scanner にはこれらの結果を自動的にスキップする機能がありますが、API スキャンにはありません。スキャン コードとフィルターが正確に一致するように選択されている場合、同じスキャンに対して TWS Advanced Scanner が表示する内容を最初に再確認することをお勧めします。

 

ジョシュ (IBKR)

ありがとう、ジョシュ。最小ボリュームの条件を設定すると、スキャナが期待どおりに動作することがわかりました。サブスクリプション.MarketCapAbove = 1e6;

ニックF

関連記事: David Armorオンラインで表示/返信 (#41903)

OK – プレマーケットでギャップのある銘柄に必要なものを取得するために、スキャナーを使った解決策を考え出しました。

私は上位 % の利益者/損失者を使用します (クロースからオープンまでは使用しません)

私は Change % (Gap % ではなく) を使用して、敗者を探す場合は LESS THAN -X% を設定し、利得者を探す場合は GREATER THAN X% を設定します。

フィルターを変更 % に設定すると、前日の終値からのギャップ % が表示されます。これはプレマーケットで機能しており、私が必要としていたものです。

この記事が、市販前スキャンに苦労している他の人に役立つことを願っています。

Q] API スキャナーが TWS の日付と同じ日付を出力するのに問題があります。

送信者: bgould96@aol.com 

送信日:  2013 年 11 月 24 日日曜日 11:19 AM

宛先: TWSAPI@yahoogroups.com 

件名:  [TWS API] RE: TWS のものと同じデータを出力するための API (Java) スキャナーの取得に関する問題

[A] by WeifeiL@gmail.com weifeil@gmail.com via yahoogroups.com

2 つのこと:

1. API にバグがあります:

 

これをスキャンオブジェクトに追加する必要があります。

 

scan .averageOptionVolumeAbove( 0 );

 

 

2. スキャンごとに、一意の ID を指定する必要があります。そして、この ID はスキャナーに関連付けられ、IB TWS/ゲートウェイを再起動するまでは変更できません。

 

スキャナー機能も頑張ってください。

 

濰肥

[A2] supermanz@gmail.com、yahoogroups.com経由

結果の間違ったフィールドを見ていると思います。 ContractDetails.m_summary.m_symbol を試してください。

bgould96@aol.com (yahoogroups.com 経由):

ああ、それはうまくいきます! どうもありがとうございます!純粋に知識として、contractDetails.m_marketName によって返されるものは正確には何ですか?

[Q] 動作するスキャナリクエストの簡単な例を教えてください。

[A] 次の通信から入手できます (ここから引用):

私はTWSに接続するためのコードを持っています…それは数年間機能していました。今日、私は次のようにスキャナーにアクセスしようとしました:

… TWS に接続する

ScannerSubscription ss = 新しい ScannerSubscription();

ss.numberOfRows(10);

ss.instrument("STK");

ss.locationCode("STK.NYSE");

ss.abovePrice(1.0);

ss.belowPrice(10.0);

ss.scanCode("TOP_PERC_LOSE");

ss.stockTypeFilter("STOCK");

toTws.reqScannerSubscription(id, ss);

…scannerDataEnd が呼び出された後、スキャナーのサブスクリプションを正常にキャンセルできます

上記を実行すると、次の結果が得られます。

エラー: ID: 936、エラーコード: 165、メッセージ: 履歴市場データ サービスのクエリ メッセージ: アイテムが取得されませんでした

上記の 1.0 と 10.0 を交換すると、次のようになります。

エラー: ID: 936、エラーコード: 162、メッセージ: 履歴市場データ サービス エラー メッセージ: 無効な価格フィルター

明らかに何かが足りないか、何かを理解していません。誰か洞察を提供できますか?

- - - - - - 答え - - - -

こんにちは、ルイスさん

ScannerSubscription.java から:

プライベートダブル m_abovePrice = Double.MAX_VALUE;

private double m_belowPrice = Double.MAX_VALUE;

private int m_aboveVolume = Integer.MAX_VALUE;

private int m_averageOptionVolumeAbove = Integer.MAX_VALUE;

private double m_marketCapAbove = Double.MAX_VALUE;

private double m_marketCapBelow = Double.MAX_VALUE;

AbovePrice AboveVolume MarketCapAbove を (たとえば Double/Integer.MIN_VALUE に)設定すると、

問題は解決されます。

デビッド

——————————— そして最終的に動作するスキャナは次のとおりです: ———————

助けてくれてありがとう。今では動作します。コードは次のとおりです。

ScannerSubscription ss = 新しい ScannerSubscription();

ss.numberOfRows(10);

ss.instrument("STK");

ss.locationCode("STK.NYSE");

ss.abovePrice(3.0);

ss.aboveVolume(0);

ss.marketCapAbove(100000000);

ss.averageOptionVolumeAbove(0); // これは必須でした!!

ss.scanCode("MOST_ACTIVE");

toTws.reqScannerSubscription(936, ss);

[Q] ScannerSubscriptionOptions を機能させることができません

他にスキャナを使っている人はいますか?それらはあまりにも文書化されていません。結合スキャンを行っていますが、部分的には正常に機能します。たとえば (C# で J# を呼び出す場合):

                int nTickerID = 301;

                ScannerSubscription ss = 新しい ScannerSubscription();

                ss.numberOfRows(10);

                ss.instrument("ボンド");

                ss.locationCode(" BOND.US ");

                ss.scanCode("HIGH_BOND_NET_ASK_YIELD_ALL");

                ss.maturityDateAbove("20171001");

                ss.belowPrice(100.1);

                ss.moodyRatingAbove("BA3");

                ss.spRatingAbove("BB-");

             

                java.util.Vector オプション = 新しい java.util.Vector();

                opts.add(new TagValue("VARCPNRATE", "false"));

                Engine.IBHandler.ClientSocket.reqScannerSubscription(nTickerID++, ss, opts);

要求した 10 件の債券が返されましたが、scannerSubscriptionOptions が機能しません。つまり、固定金利債券と変動金利債券が混在しているためです。 reqScannerParameters() XML を研究して、さらにフィルタリングを試みました。 VARCPNRATE は BOND に対して機能するはずですが、どのように機能するのでしょうか?

誰かがscannerSubscriptionOptionsを機能させた人はいますか?これらの TagValue オプションに関するガイドはどこかにありますか?ヒントをいただければ幸いです。

[A] by Josh (ここにあります)

2017 年 5 月 10 日に追加

こんにちは、Harlan。残念ながら、API スキャナーは、TWS Advanced Market Scanner と比較して、利用できるフィルターとスキャンがかなり制限されています。 reqScannerParameters には、TWS スキャナーで使用できるパラメーターがありますが、すべてが API から使用できるわけではありません。 reqScannerSubscription の 3 番目のパラメーターは、リクエストの発信元を指定するために一部のサードパーティ アプリケーションによってのみ使用され、それ以外の場合は null です。使用可能なフィルターは、単に ScannerSubscription オブジェクトのメンバーです。

ジョシュ

[Q]スキャナーの実行時に TWS 経由でアクセスできない可能性がある契約に関する注意事項:

[A] by Joshオンラインで表示/返信 (#41572)

API では利用できないスキャン結果を TWS Advanced Market Scanner で受け取った場合、結果に TWS を通じて取引できない契約が含まれていることが原因である可能性があります。 TWS Advanced Market Scanner にはこれらの結果を自動的にスキップする機能がありますが、API スキャンにはありません。スキャン コードとフィルターが正確に一致するように選択されている場合、同じスキャンに対して TWS Advanced Scanner が表示する内容を最初に再確認することをお勧めします。

[Q] マーケットスキャナーの市場時間前/市場時間後:

[A] by David Armor dave.armour at gmail.comオンラインで表示/返信 (#42026)

OK – プレマーケットでギャップのある銘柄に必要なものを取得するために、スキャナーを使った解決策を考え出しました。

私は上位 % の利益者/損失者を使用します (クロースからオープンまでは使用しません)

私は Change % (Gap % ではなく) を使用して、敗者を探す場合は LESS THAN -X% を設定し、利得者を探す場合は GREATER THAN X% を設定します。

フィルターを変更 % に設定すると、前日の終値からのギャップ % が表示されます。これはプレマーケットで機能しており、私が必要としていたものです。

この記事が、市販前スキャンに苦労している他の人に役立つことを願っています。

  • 明確にするために、上位 % の勝者/敗者スキャナーはフィルターなしで時間前/時間後に更新されますか?
  • はい。市場が再開したときにのみ機能すると思われる、時間外または市場時間前のオプションは使用しないでください。

[A2] Joshオンラインで表示/返信 (#41888) :

2019年3月2日土曜日、午後5時26分、ライトブルック・ブローカーズは次のように書きました。

reqMktData (ティック タイプ 4、最終価格) のコールバックは、時間前/時間後に更新を継続しますか?

はい、最終取引価格を含む結果は、通常の取引時間の前後に更新され続けます。

また、営業時間外の上位 % の勝者/敗者も試してみましたが、これも何も返されませんでした。

この投稿https://groups.io/g/twsapi/message/41570を参照し 、同じ方法でフィルターを追加して、スキャン結果をさらに制限するとよいでしょう。スキャン結果が IB で取引できない商品の場合、API には返されません。

[Q] スキャナー サブスクリプション オブジェクトを作成するときに、オーストラリアの場所コードを見つけるにはどうすればよいですか?

[A]オンラインで表示/返信 (#45084)

2021 年 2 月 8 日に追加

これは私が「場所コード」を見つけるために使用する方法です。

1) reqScannerParametersを呼び出します。

2) コールバックのscanParameters内。利用可能なすべての XML 形式のパラメータを含む文字列を受け取ります。

3) XML ファイルを開き、「Australia」を検索します。詳細については、添付の図を参照してください。

4) この XML のロケーション コードを、ScannerSubscription オブジェクトの Python プログラムにパンチインします。

scanSub = ScannerSubscription() # マーケットスキャナリクエストを定義します

scanSub.instrument = 'STOCK.HK'

scanSub.locationCode = 'STK.HK.ASX'

RGDS、

パヴァン

IBニュースの購読

【Q】API経由でニュースフィードを購読した場合、ランクを獲得することはできますか? 「はい」の場合、どのようにして?

[A]オンラインで表示/返信 (#45989)

2021 年 5 月 13 日に追加

– 単なる推測ですが、 ticNews()に渡される extraData 引数にエンコードされているようです

– 確認しましたが、これは文字列であり文書化されていないことに注意してください。

- みんなありがとう! extraData にはこれが表示されます。「L:unknown:K:-1.00」のようなものです。「K」はランクを表す必要がありますが、一部のメッセージにはランクがまったく含まれていないため、注意することをお勧めします。

初心者向けの基本

TWS の対応する機能を常に試してください。それであれば

TWS でも動作しない場合は、API の問題ではありません。 (カート)

[Q] 語彙

[A]

ATS – 自動取引システム

BBO – 最高入札オファー (NBBO = 国内 BBO) (RBBO = 地域 BBO)

DOM – 市場の厚み

CFD – 差額契約 

GAT –グッドアフタータイム (GAT) 注文

MOC – 成約注文でマーケット (例: oca グループの MOC 注文)

              MOO と MOC は米国株に作用します。他の市場については IB の Web サイトを確認してください。

              MOO 注文の難点の 1 つは、有効期間に「OPG」を指定する必要があることです。

また、これらの注文タイプは、特定の時間が経過した後にキャンセルすることはできません。私

これはしばらくやっていませんが、以前は株の場合に行うことができました

ニューヨーク時間午後 3 時 50 分以降は MOC をキャンセルしないでください。必ずすべて調べてください

これらの注文タイプを行う前に詳細を確認してください。

MOO – オープンオーダーでの市場

OCA – 1 回限りのキャンセル

OCO – one-cancels-other (1 つの注文が実行されると、別の注文が自動的にキャンセルされます:)

OCA/OCO に関するメモ:この スレッドの Richard L King 著

これによって問題が回避されるという保証はありません。 OCA グループ内の 2 つの注文の価格がかなり近い場合、両方の注文が速い市場で約定される可能性があります。これは、最初の注文が約定されると、IB は取引所から最初の注文の約定通知を受信するまで 2 番目の注文をキャンセルするかどうかを知ることができず、その後キャンセルを取引所に送信する必要があるためです。この間、2 番目の注文は満たされる可能性があります。

これは実際に数年前に誰かに起こり、彼らはIBに苦情を申し立てましたが、IBは(当然のことながら)OCAグループ内の1つの注文だけが満たされるという保証はできないと指摘しました。

より安全なアプローチは、単純に単一のストップロス注文を使用し、必要に応じてその価格を調整することです。エントリ注文の送信時に子注文として含めることができ、安全のために幅広いストップを設定できます。エントリー注文が約定すると、必要に応じてストップロス注文のトリガー価格を厳しくし、その後利益の増加に応じて調整することができます。

RTH – 通常の取引時間 (9:30 から 16:00 など)

NBBO –相対(別名ペッグトゥプライマリ)注文は、トレーダーがより積極的な注文を求める手段を提供します

全国最高入札価格(NBBO )よりも高い価格

VWAP – 出来高加重平均価格

[Q]シンボルの数に制限はありますか?

[A] IB ウェブサイト より

すべての顧客は、最初に 100 行のリアルタイム市場データ (TWS または API 経由で表示可能) を同時に受け取り、常に少なくとも 100 行のデータを保持します。お客様は、毎月のQuote Booster パックを購入することで、同時見積りウィンドウの許容範囲を増やすことができます

[Q] APIのバージョン情報はどこで確認できますか?

[A]

C:\Jts\API_VersionNum.txt

[Q] IB APIリストに質問を投稿しようとしています。どうすればいいですか?

[A]

1. [Q] を質問する前に、基本的な Google 検索を行ってください。

2. TWS API アーカイブで質問に関連するキーワードを検索します。

3. 確かに、何も見つかりませんでした。グループに投稿を書いているところです

    – 使用しようとしている API タイプを含めます

    – API に送信するものを正確に含めるようにしてください

    – (コールバックの形式で) どのような返信を受け取りますか?

        – 考えられるすべての API コールバックをログに記録していますか、それとも 1 つだけ見逃している可能性があります

   「ABCやったけど何も起こらなかった…」と思っていませんか?

    – 一般的には正確であるように努めます(曖昧ではありません)

    – 1 日に 10 件を超える投稿を送信しないようにしてください 😉

     (数千人の購読者がこれを読む必要があります。ある程度の敬意を払ってください:)

[Q] IBまでのホップ数は?

[A]

アップグレード後に HDMS マーケット データ接続の問題を経験した人はいますか

906まで?

安定した接続が得られなかったので、900にダウングレードしました。

サポートから、tracert のホップが多すぎると言われています。どうやらサポートは

エンジニアは、もし次のようなことがあれば、ブリティッシュ テレコムが私の代わりにそれらを (26 から) 15 に減らすだろうと考えています。

文句を言うか、そうでなければ ISP を変更してください!

— アダム・ハーディ

いつも gw1.ibllc.com に ping していました

現在、米国ノースカロライナ州からの往復の平均時間は約 50 ミリ秒です。

14ホップ以上のロードランナーターボ。

— FutureScalper

その他:

ここでは 14 ホップ、55 ミリ秒 (16Mb コムキャスト ビジネス クラス)

9 ホップ、37 ミリ秒 (メリーランド州の小規模コロケーション施設)

接続速度に関しては、他の現在のスレッド、tracert を読み取るだけです。

200ms でサーバーから 25 ホップ離れていることを示しています – 私は ヨーロッパにいます – と IB サポート

スタッフによれば、これは良好な接続が保証されているわけではありません🙁

ping @ 95 ミリ秒ごと。

【Q】IBリアルタイムデータは本当に「リアルタイムデータ」なのでしょうか?

[A] (もっと調べてください)

IB のデータはそもそも「生きた」ものではありません。これは、5 ~ 30 ミリ秒間隔の一連のスナップショットです (正確には覚えていませんが、yahoo の TWSAPIgroup を確認できます。IB がデータを配信する方法については、どこかに非常に詳細な説明があります)。結論としては、これはライブではないため、IB のデータは通常、取引開始時や FRB の発表中に遅れることがありません。したがって、IB のデータには「高速市場」などというものは存在しません。

- また -

IB のティックが他の誰かのティックと一致するとは期待しないでしょう。あなたはそれを知っています

IBのダニはサンプリングされていますか?

-カート

正確な詳細は頭の中に残っていないのですが、次のようなものです。

1 秒あたり 10 ティックという制限が課されていますが、これよりも高いレートが適用されると思います。

特定の種類の楽器。 (誰かが決定的な情報を投稿しました)

これは数か月前のことですが、メッセージが見つかりません。)

-カート

- また -

IB フィードは、意味のある作業を行うのに十分な解像度を持っています。

- また -

ただし、サンプリングされていないティック データが必要な場合は、それを取得するために別の場所に移動する必要があります。

データ。

-カート

- また -

これは emini-watch.com からの抜粋です。

「Trader Workstation Software (TWS) 経由で利用できる IB データ フィードは、真のティックごとのデータ フィードではありません。IB は、その間隔中に行われた取引の集計を含む取引データのスナップショットを 1 秒間に数回提供します。結果として、時間ベースのチャート (5 分足チャートなど) は正しくなりますが、ティック チャートは正しくなりません。」

— また — rwk0434によるgmail.com  ( src ):

実際には、データを取得する方法が 3 つあり、混乱が生じている可能性があります。1) reqMktData() 、2) reqHistoricalData() 、および 3) reqRealTimeBars()です。履歴データは別のサーバー ファームから取得されており、明らかな不一致の原因となっています。リアルタイム バーがプライマリ データ サーバー上に構築されているのか、それとも履歴サーバー上に構築されているのかはわかりませんが、一部のアプリケーションではデータの不一致が少ないようです。

IB データがサンプリングされることはよく知られています。 (注:株式データはすべて 250 ミリ秒、オプション データはすべて 100 ミリ秒でサンプリングされます) サンプリング レートは、一部の GLOBEX 市場を除き、10/秒であることを除き、約 3/秒です。 (私にとってはとにかく)あまり知られていないのは、一部の会場が混同されたデータを配布し始めたことです。株式取引をしていて HFT の動向を追っている人なら、公式の SIP フィードよりも先に実行されるデータ フィードがあることをご存知でしょう。

これにより、IB データがアクティブな取引にどの程度使用できるかという疑問が生じます。完全性と適時性は両立できるが、両方を兼ね備えることはできないというのが私の信念です。 IB は適時性を選択しており、それが私の好みでもあります。完全性が必要な場合は、他のデータ フィードを検討する必要があります。両方を必要とする場合は、コロケーションなどの高価なインフラストラクチャが必要になります。

データをバーに整理するトレーダーにとって、サンプリングされたデータの影響により、バーが高値または安値を欠落することがあり、通常は 1 ティックだけですが、それ以上になる場合もあります。多くのトレーダーはそれが受け入れがたいと考えています。データの不一致が長期的な収益性に大きな影響を与えるかどうかは懐疑的です。このような時折発生するデータの不一致を回避することで、より大規模なインフラストラクチャの追加コストがどのように正当化されるのか想像するのは困難です。

[Q] ES で買い指値注文を渡すと、たとえば 1300.25 で約定するために価格が 1300 になるまで待たなければなりません...これは正常ですか?

この スレッド の rwk 2095 による[A]

私は ES の専門家ではありませんが、とにかくコメントしてみます。取引所固有の注文タイプ (「リミット」は Globex 固有のもの) を使用している場合、高頻度取引 (HFT) を行っていない限り、ブローカー間での違いはほとんどありません。あなたの注文は列の最後尾に並びます。 ES のような非常に忙しい市場では、インサイド価格が注文を超えて動かなければ、約定することはほとんどありません。

「ストップ」などの非ネイティブ注文を使用している場合、注文はブローカーのサーバー上でシミュレートされるため、遅延がかなり大きくなる可能性があります。そのため、ネイティブ以外の注文は避けるのが最善です。

米国株式市場など、中央の指値注文帳がない市場で取引している場合、ブローカー間で約定の質に大きな差があります。 IB は一般的に評判が良いです。

[rwk]

[A2]投稿者: poch32

各 DOM レベルには FIFO キューがあることに注意してください。たとえば、DAX 7002.5 で販売中の契約が 50 件あり、あなたの契約がたまたま #48 に到着した場合、実際には、7002.5 レベル全体を完全に埋めて、 7002.0 で満腹を保証します。

[Q] SMART 上の IBM のような銘柄でアルゴリズムを試した場合、この問題は発生しますか?

この スレッド の Eric J. Holtman による[A]

株に関しては無限に悪化するだろう。

少なくとも Emini では、中央コンピューターが 1 台あります

注文照合を実行し、すべてが一致していると仮定します

まあ、順番を待ってお腹を満たすだけです。

たとえば、IBM@SMART では次のようになります。

NBBO は 104.14 x 104.16 です。を入れたとします。

@104.14で購入する注文。 IB は次のいずれかを選択する必要があります

注文を送信できる取引所は多数あります。

それが間違った選択をしたとします。あなたの注文がそうなる可能性があります

たとえ株価が一日中取引されても満たされない

104.14で。

次の場合にはフィルが得られない可能性もあります。

株価は104.13で取引されている。さて、その場合、次のことができます

IB に報告書を提出してみてください。彼らは見に行くでしょう

テープ (運が良ければ)、価格が表示される*かもしれません*

改善または埋め合わせ。

あなたもそうではないかもしれません。いくらでも言われるでしょう

言い訳ですが、肝心なのは、時々、あなたはただ

あなたが「ふさわしい」と思うほどの満足感は得られません。

さて、これは小規模小売業者だけが切り取られるわけではありません

100ロットで1ペニー。私はファンドで働いていました

私たちは何万ものものを投げていました

株式、大手企業とプライムブローカー関係を結んでいた

ウォール街の銀行の皆さん、私たちの運用資産は1億ドルを超えていましたが、今でも

常に「トレードス​​ルー」に悩まされてきました。

それはビジネスを行う上での対価です。

そして、上記はすべて実際の「貿易」に関連するものです。

「スルー」、これは違法である必要があります (またはすぐに修正できる)

しかし実際には、ただ食べるだけです。上に

それは単なる日常の園芸品種の滑りです:

同じ 104.14×104.16 に IBM が表示されます。あなたが提出します

成行注文、104.16を予想。 104.18 が得られます。

取引へようこそ!

[Q] 私はファイアウォールの内側にいますが、TWS の送信ポートを知りたいのですが?

[A]  by カート

「tws ports」でグーグル検索すると、次の IB ページが表示されます。

http://www.interactivebrokers.com/en/general/education/faqs/technical.php

4000 と書かれていますが、それを入手するには 4000 と 4001 を開けなければならなかったのを覚えているようです。

働く。間違えてもすぐに分かります。

ただし、ニュース フィードなど用のポートは他にもあります。走れば

netstat に正しい引数 (netstat -a だと思います) を指定すると、これらすべてが表示されます。

私が思い出したように、URL からそれらはすべて非常に明白でした。

リストに表示されます。

-カート

[Q] その他の TWS API FAQ?

[A]

https://www.interactivebrokers.com/en/general/education/faqs/technical.php

[Q] 一般的な推奨事項はありますか?

[A] スティーブ・ノボトニー著

時間を大幅に節約できます: オンラインで常におしゃべりしたい人

彼らのシステムにはそれがありません(とにかく利益をもたらします)。欲しい人

あれやこれやの指標、ピボット、技術的なことについて絶えず話すこと

分析しても、なんとかニッケル取引をしたことはありません。

..そして、寝ている間に利益を得る方法を思いついた人はそうではありません

誰かに何でも言うこと。 (最後の 2 つの段落の例外は、

偶然、しばらくの間効果があるものを見つけた人たち

彼らが興奮するには十分です J )

本を読まなければ、膨大な時間を節約できます

取引については、取引について議論するグループには参加せず、マテリアルは購入しないでください

貿易に関係するもの。代わりに、過去の価格をよく見て、ブレインストーミングを行ってください。

どうやって勝つかについて (断言しますが、それは明らかではありません)

SIMPLE)、統計的に責任のある方法でアイデアをテストします。

- また -

こんにちは、レジスさん

Elite Trader フォーラムに参加してみてはいかがでしょうか。彼らはいつもそのようなことについて話します。

また、より数学的な洞察が必要な場合は、Wilmott などの QUANT Finance フォーラム、またはhttp://www.quantitativefinanceforum.com/を参照してください。

本については、アイリーン・アルドリッジの「高頻度取引」とアーニー・P・チャンの「定量的取引」に関する本から始めてください。どちらも非常に読みやすいです。

Andrew Mole の「Statistical Arbitrage」も検討してみてください。

これらは良い出発点となるはずです。

スティーブ。

【Q】IB手数料率比較

[A] https://www.interactivebrokers.com/en/?f=commission#options-clear

[Q] マーケットデータを同期するにはどうすればよいですか?

イスラエル人より: 皆さん、こんにちは。

IB を使用してリアルタイムの市場データをキャプチャしています。

現時点では、シンプルにして、reqMktDataEx のみを使用し、tickPrice および NickSize イベント ハンドラーの結果をリッスンします。

これはうまくいきます。

私の質問は、すべてのデータ (入札、売値、最後など) が同期されていることをどのようにして確認できるかということです。特定の期間において、これらすべての要素 (買値、売値、最終値、サイズと価格) がその時点の実際の値であることをどのようにして知ることができますか?

これは多くのプログラマーが直面した疑問だと思います。あなたのアイデアやご意見をお待ちしております。

ありがとう

[A]エリック・J・ホルトマン

まず、IB データがサンプリングされるため、実際には *決して* 正確ではありません。

第 2 に、 データとともにタイムスタンプが提供されないため、

それが取引所からの報告が遅れているのかどうかを判断する方法はありません。

第三に、引用はかなり古いものになる可能性があります。株の取引が薄ければ、

更新を受け取るのに数秒、場合によっては数分かかる場合もあります。

— エリック

[A2]  by skunktrader2001

同期されていません。フィードはグリッドを更新するように設計されています。

【Q】受注率上位に関するお知らせ

[A ]オリオン

IBからこれを入手しました:

「親愛なるトレーダー様、

注文と注文変更の比率が非常に高いことがわかりました。

あなたのアカウントの実行数に相対して ******。注文ごとに

あなたが提出した指示(新規注文の提出、注文を含む)

変更、キャンセル)はコンピューティング能力を利用します。過剰な注文

アクティビティが IB システムの速度を低下させ、他のクライアントに悪影響を与える可能性があります。

IBは過剰かつ不必要な注文/取引比率を監視します。

システムリソースの使用率。原則として、比率の値が

1 回の実行あたり 10 個の注文アクションは通常許容されますが、

比率が 5:1 を超える特定の市場では手数料が適用される場合があります。その上

20:1、IB は自動注文管理ツールを使用してクライアントに次のことを要求します。

注文管理行動を最適化します。 100件以上の注文

実行、または分析により IB の組織的悪用が示された場合

自動化サービス、IB はシステム使用率を削減する措置を講じる場合があります

含まれるもの: 注文変更に対する手数料の請求 (通常、注文金額の 20%)

実行手数料)、または API サービスへのアクセスを制限します。

ほとんどの場合、過剰な注文/貿易比率は、不適切なことが原因で発生します。

最適化された API またはその他の注文作成プログラム。これらのアプリケーション

~の可能性を実質的に変えない価格変動を引き起こす。

注文が満たされています。たとえば、株価が 50.0 ~ 50.2 である場合、

その場合、次数が 45 から 46 に変更されても、実際には確率は変わりません。

実行の。

ほとんどのクライアントは、次の方法で注文管理を簡単に改善できます。

「無駄のない」ロジックをシステムに導入しています。よろしくお願いいたします

注文管理ロジックを検討して、不必要な注文を減らします。

推奨レベル。」

「削減方法に関する提案を含む追加情報については、

注文管理行為に無駄がある場合は、KB1343 (IB../1343) と入力してください。

) IB ホームページにある検索エンジンにアクセスするか、API に問い合わせてください。

サービスグル​​ープ(api@interactivebrokers.com)

インタラクティブ・ブローカーズ・カスタマー・サービス」

続きを読む:

https://groups.io/g/twsapi/topic/4044829

ZenFire はプログラマーの観点からすると非常に魅力的な選択肢に思えます

[Q] 一部の IB API タイミング要件

[A1] Bill Pippin 著 (このスレッドから)

API は、リクエストにタイミング要件を課すだけではありません。

一般 (IB tws の場合は 20 ミリ秒、ゲートウェイの場合は ~6 ミリ秒)。それ

また、子命令にあまりにも厳密に従う子命令も定期的に拒否します。

親のかかと(民間伝承ではここで 300 ミリ秒と言われています)。同じ記号

2 秒ごとに 6 件を超える割合で履歴クエリが実行されます。そして

一般に履歴クエリ、10 件中 60 件以上の割合

分。さらに悪いことに、履歴クエリのペーシング要件は次のようになります。

上流側によって強制されるため、競合が発生する可能性があります。

ネットワークジッターに対処する必要があります。

[A2] 電話による Angel@IB サポート:

。私が参照した制限は reqContractDetails( ) 制限でした。詳細は以下を参照してください。 

注: IB は、reqContractDetails( ) を呼び出すときに制限を実装しており、後続のリクエストに対して ContractDetails( ) コールバックを 5 ~ 60 秒バッファリングします。ペーシング制限 (最大 8 リクエスト) を回避するには、m_expiry パラメーター内に YYYYMMDD 形式で完全な有効期限と、ストライク、権利、乗数を指定することが重要です。それ以外の場合、上記で概説した正確なパラメーターを指定して契約の詳細をリクエストすると、5 秒間バッファーされます。

たとえば:

有効期限 = 空白または NULL の場合

シンボル = 「IBKR」;

secType = “OPT”;

有効期限 = "" ;

交換 = 「スマート」;

通貨 = 「米ドル」;

上の例では、有効期限が null または空の文字列に割り当てられている場合、遅延は 1 分になります

有効期限 = YYYY の場合 (例: 2014) 

シンボル = 「IBKR」;

secType = “OPT”;

有効期限 = "2014" ;

交換 = 「スマート」;

通貨 = 「米ドル」;

上の例では、有効期限が年のみに割り当てられている場合、遅延は 1 分になります

有効期限 = YYYYMM の場合 (例: 201402) 

シンボル = 「IBKR」;

secType = “OPT”;

有効期限 = “201402” ;

交換 = 「スマート」;

通貨 = 「米ドル」;

上の例では、有効期限が年月形式 (YYYYMM) に割り当てられている場合、遅延は 5 秒になります

有効期限 = YYYYMMDD の場合 (例: 20140221) 

シンボル = 「IBKR」;

secType = “OPT”;

有効期限 = “20140221” ;

交換 = 「スマート」;

通貨 = 「米ドル」;

上記の例では、これは前月オプション契約でのみ機能することに注意してください。有効期限が年、月、日 (YYYYMMDD) に割り当てられている場合、遅延はありません

履歴データのペーシング制限については、次の URL を参照してください。 

https://www.interactivebrokers.com/en/software/api/apiguide/tables/historyal_data_limitations.htm 

よろしく、

-天使 

IB APIのサポート 

Dmitry は、この文書を完全にするために、上記 URL の「履歴データの制限」の内容をコピーして貼り付けました。

- - - - - - - - - - (引用) - - - - - - -

履歴データの制限

履歴データのリクエストには次の制限があります。

すべての証券向け

  • ティックごとのデータは API テクノロジーを通じて中継されることはなく、タイム バーの計算に使用される生の値のみが提供されます。
  • 調査と指標は、API テクノロジーを通じて中継されることはありません。
  • 日中のバーのサイズはローカル タイム ゾーンで中継され、日次のバー サイズ以上は Exchange タイム ゾーンで中継されます。
  • 日足バーのサイズ以上の場合、日付値は "yyyymmdd" 形式でのみ返されます。formatDate = 2 は日中バーでのみサポートされます。

株式、CMDTY、ETF、外国為替、指数、CFD の場合

  • 「30 秒」以下のバー サイズを使用する履歴データ リクエストは、6 か月前までしか遡ることができません。
  • 同時リアルタイム市場データ行の数に応じて、履歴データのリクエストは 1 暦年以上遡ることができます。

市場データ行の数

歴史的なデータ

リクエスト制限

499以下

1年

500 – 749

2年

750 – 999

3年

1000 -1249

四年間

1250 – 1499

5年

 

市場データのラインは、毎月の手数料額、株式の額、および Quote Booster サブスクリプションに基づいて増やすことができます。 「市場データライン」とは、TWS の相場ラインと、API で呼び出される各 reqMktData() および reqRealTimeBars() メソッドを指します。

  • 市場データが手数料と資本によってどのように影響されるかについて詳しくは、当社 Web サイトの市場データ表示 ページの「市場データの計算方法」セクションを展開してください。
  • Quote Booster は、現在のリアルタイム市場データ ライン制限に加えてカウントされます。相場ブースターのサブスクリプションによって市場データがどのように手動で影響を受けるかについての詳細は、「 市場データ表示」ページの「相場ブースター」セクションを参照してください。アカウント管理の市場データ購読ページでQuote Boostersを購読します。

次の表は、履歴データの合計年数を増やすために必要な毎月の手数料、必要な資本、および/または見積もりブースター パックを示しています。

合計年数

歴史的なデータ

通信 x データ = 毎月の通信

毎月必要な手数料

株式 x データ = 毎月の株式データ

毎月必要な資本

データ – デフォルト = データが必要です

|必要なデータ/ブースターごと| = トータルブースター

1年

4000ドル未満

5,000,000 米ドル未満

ブースターパック 3 個以下

2年

8.0 米ドル x 500 米ドル = 4,000 米ドル

10,000 米ドル x 500 = 5,000,000 米ドル

500 – 100 = 400

|400 / 100| = 4

ブースターパック4個

3年

8.0 米ドル x 750 米ドル = 6,000 米ドル

10,000 米ドル x 750 = 7,500,000 米ドル

750 – 100 = 650

|650 / 100| = 7

ブースターパック7個

四年間

8.0 米ドル x 1000 = 8,000 米ドル

10,000 米ドル x 1000 = 10,000,000 米ドル

1000 – 100 = 900

|900 / 100| = 9

ブースターパック9個

5年

8.0 米ドル x 1250 米ドル = 10,000 米ドル

10,000 米ドル x 1250 米ドル = 12,500,000 米ドル

該当なし (最大見積ブースター パックは 10 個に制限されています)

注:  過去のデータが利用できる範囲を増やしても、ペーシングの制限には影響しません。ペーシング制限は IB のサーバー バックエンドでハードコーディングされているため、ユーザーが調整することはできません。詳細については、以下の「ペーシング違反」セクションを参照してください。

先物、SSF、金属の場合

  • 現在の有効期限から 2 年後の期限切れの先物については、履歴データのリクエストが可能です。
  • 履歴データのリクエストは通常​​、有効期限ごとに最大 6 か月間利用できます。
  • 履歴データのリクエストには有効期限を指定する必要がありますが、現時点では継続契約はサポートされていません。

オプション、FOPS、ワラントおよびストラクチャー商品の場合

  • 履歴データのリクエストは、現在の有効期限に対してのみ利用できます。
  • 一日の終わり (EOD) データは利用できません。有効なバー サイズは「1 秒」から「8 時間」です。
  • 履歴データのリクエストは通常​​、有効期限ごとに最大 2 暦月まで利用できます。

債券とファンドの場合

  • 履歴データのリクエストは API 経由では利用できません。リクエストできるのはリアルタイム データのみです。

注:  リアルタイム データのリクエストの詳細については、DDE for Excel の章の「ティッカー ページの使用」、ActiveX の章の reqMktDataEx()、C++ の章の reqMktData()、Java の章の reqMktData()、「reqMktData()」を参照してください。 「C#」の章と「ActiveX for Excel」の章の「ティッカー ページの使用」を参照してください。

リアルタイムバーの場合

リアルタイム バーをリクエストする場合、これは履歴データをストリーミングするためのクエリであり、データは履歴データを提供するのと同じサーバーから中継されます。そのため、リクエストを開始する際には、以下の「ペーシング違反」セクションで概説されているのと同じペーシング制限が適用されます。また、リアルタイム バーのリクエストはストリーミングとして提供されるため、当社ウェブサイトの市場データ表示ページに概説されている市場データ ラインの総数にカウントされます。

注:  リアルタイム バーは DDE では使用できません。リアルタイム バー リクエストの詳細については、ActiveX の章の reqRealTimeBarsEX()、C++ の章の reqRealTimeBars()、Java の章の reqRealTimeBars()、C# の章の reqRealTimeBars()、および ActiveX for Excel のリアルタイム バーを参照してください。章。

[Q] ペーシング違反とは何ですか?

すべての API テクノロジーは履歴データのリクエストをサポートしています。ただし、短期間に同じ履歴データをリクエストすると、バックエンドに余分な負荷がかかり、その後ペーシング違反が発生する可能性があります。ペーシング違反を示すエラー コードとメッセージは次のとおりです。

162 – 履歴市場データ サービスのエラー メッセージ: 履歴データ要求ペーシング違反

次の状況ではペーシング違反が発生する可能性があります。

  • 15 秒以内に同一の履歴データのリクエストを行う。
  • 2 秒以内に同じ契約、為替、ティック タイプに対して 6 つ以上の履歴データ リクエストを行う。

また、履歴データをリクエストする場合は、次の制限事項にも注意してください。

  • 10 分間に 60 件を超える履歴データ要求を行わないでください。
  • reqHistoricalData() の whatToShow パラメータが BID_ASK に設定されている場合、これは 2 つのリクエストとしてカウントされ、BID と ASK の履歴データを別々に呼び出します。

注:  履歴データ要求の詳細については、 「DDE for Excel」の章の「履歴データの表示」 、  「ActiveX」の章の「reqHistoricalDataEx()」、C  ++」の章の「reqHistoricalData() 」、  「Java」の章の 「reqHistoricalData()」 、「 「C#」の章と 「ActiveX for Excel」の章の「履歴データの表示」 。

有効な表示内容の値

次の表に、対応する製品に基づいた有効な whatToShow 値を示します。

*CFD インデックスにのみ適用されます。 CFD 株の場合は、原株を指定する必要があります。

履歴データリクエストの有効な期間とバーサイズの設定

次の表に、API 履歴データ リクエストの有効な期間とバー サイズの設定を示します。これらは単なるガイドラインですが、これらを超えようとすると、各リクエストが複数としてカウントされ、上で概説したようにペーシング違反が発生する可能性があることに注意してください。

—————————————————–(引用終わり)——————————————–

[Q] 同一の原資産を同時にロングとショートにすることはできますか?

[A] 短い答え – いいえ。同じ銘柄でロングとショートを入力すると、フラットになります。

しかし、この質問には別の意味もあります。

Q]履歴データを集計するプログラムはありますか?

[A]ピーター・ガム著

いくつかの履歴データ集約プログラムを検討してみることをお勧めします。

Jtwsdump と ibcollector が思い浮かびます (これらの名前をグーグルで検索してください)。

-ピート

[Q] 問題を診断するにはどうすればよいですか?

[A] by カート

「初心者向け」の問題を診断するときに必ず確認すべき 2 つの基本的な事項:

* TWS の対応する機能を試してください

(おそらく取引画面と口座ウィンドウの両方で損益列を見てください)

* サンプル API アプリで同じこと (reqAccountUpdates) を実行してみてください

これら 2 つのことを行うことで、ほとんどの問題が明らかになります。

経験。独自のコードで起こり得る問題をすべて排除し、

IB に問い合わせると簡単に解決できます。

デモ口座や紙の口座でも試してみて、結果が得られるかどうかを確認してください。

異なる結果があった場合でも。

しかし、サンプル アプリでも同様に動作が悪い場合は、次のようなことが起こると思います。

この問題は私が見たことも、ここにいる他の人の話を聞いたことも覚えていません

その時点でおそらくIB と話す時期が来ているでしょう。こんな理由はない

あなたが説明しているのと同じくらい悪く動作するはずです、そしてあなたが対処しなければ(行きます)

代わりに回避策として)他の場所で問題が発生する可能性があります。

-カート

[Q] DDE を使用してはいけないのはなぜですか?

[A]アビジット・デイ 著

この DDE の不安定性の問題を証明できます。素早いモデリングが好きです

Excel の機能を利用し、そこからいくつかの命令を発するのが好きです。

ただし、たとえば 50 以上のティッカーが含まれるスプレッドシートを開くたびに、

購読しているので、Excel が爆発する可能性が高いです。ほとんどの場合、

マシンがめちゃくちゃになったので、(Excel DDE が動作する前に) 再起動する必要があります

また)。 Excel 97 形式から新しいバージョン (office

2007)、しかしそれはまったく役に立ちませんでした。どちらの Vista 64 でも同じエクスペリエンス

そしてXP32。

本当に悲惨な現状…

[Q] デモアカウントのAPIの動作はリアルアカウントの動作と異なりますか?

[A]  byカート

それは1、2年前の私の経験でした。

デモ口座はかなり多くのことに役に立ちません。歴史あるバーも

異常な動作のため、コードのテストに関しては役に立たなかった

奇妙な種類のデータリセットが発生するなど、非常にバザールでした

一日および/または週のさまざまな特定の時間帯に。特定の時間帯(含む)

金曜日の夜のリセット後だと思います)バーはなくなるでしょう。

返されるバーの数は、すべての場合に常にゼロになります。

実際にテストできるように、くだらない歴史的なバーを作成するコードを書きました。

週末にコードを作成しました (以前はデモのみが行われていました)

ランニング)。私の 120 行のコードは、デモログインよりもうまく機能しました。

履歴データ用。リアルタイムバーもシミュレートしたかもしれません、忘れました。

そのため、本当に奇妙なものがある場合を除いて、デモ口座の使用をやめました。

実際にそれが必要な理由。市場データのティックを取得するために以前に必要でした

あるバグの発生条件を行使するためにやって来た。

-カート

【Q】「EX」メソッドとは何ですか?

[A]  byカート

Ex メソッドは ActiveX のものだと思います。少なくとも以下に説明されています。

API ドキュメントの ActiveX セクションにない場合は、リリース ノートを参照してください。

Java または C++ を使用している場合、Ex メソッドは問題になりません。

-カート

[Q] カスタムインジケーターはありますか?

[A] by バスコシ

これは 2009/11/30 に IB から受け取った返信です。

残念ながら、カスタム インジケーターはサポートされなくなりました。また、カスタマーインジケーターのサンプルコードは提供しておりません。

API 環境では、生データのみが提供されます。生データを関連付けるインジケーターを実装するのはユーザーの責任です。残念ながら、カスタムインジケーターのサンプルはありません。

IB APIのサポート

[Q] 他に初心者向けのヒントやヒントがあれば教えてください。

[A]  byカート

通常、私はすべてのことについて最初に契約の詳細を要求し、結果を保存します。の

結果のコントラクトは、後続のリクエストに使用されます。

カート

(数か月後…)

したがって、私が提案できる唯一のことは、placeOrder は

契約オブジェクトは、契約詳細または市場データを要求します。

一般的な経験則は、契約を取得するには契約の詳細を要求することです

ID。次に、placeOrder を含む他のすべてのリクエストでそのコントラクト ID を使用します。

契約 ID を指定する場合は、他のフィールドを指定する必要はありません。

考えられるエラーの原因をいくつか取り除くことができます。

あなたのコードと私のコードの唯一の違いは、あなたが

localSymbol を設定しますが、NULL 文字列に設定したままにします。地元

記号は、同じ契約を結ぶ個々の契約を区別するために必要です。

有効期限を指定しない場合は、基礎となるもの。他の人も最近、

を指定したときに、以前は機能していたコードが機能しなくなったと報告しました。

必須ではないフィールド。私の印象では、必須ではないフィールドは

以前はより多くのコンテキストで無視されていましたが、現在 IB は次のエラーを報告しています。

これら。

–カート

[A]

「前に一度言ったように、アカウントに登録したままにしておくのがおそらく役立つでしょう」

継続的に更新されます。」 – Kurt Bigler < kkb@… >

私はその提案に賛成です。 IB に予期せぬポジションを追加してもらったことは何度かあります

日中(スピンオフ、取引の破綻など)。

–フランク・ベル

[A] 注文を迅速に行うための興味深いテクニック ( FutureScalperによる):

私の市場戦略の標準的な方法は、

買いたいところに指値注文を出します。代わりに、システムがチェックします

さまざまな条件を1秒間に複数回判断するために

いつ、どの価格でストライクするか。次に、事前にロードされた制限を移動します

市場の外で保留されている注文を権利行使価格まで引き上げます。

事前にロードされた制限は、変更することで市場の外に留まります。

価格は可能な限り経済的ですが、次のような状況に移行する必要があります。

必要になるまで市場の外に十分に留まること。かもしれない

攻撃する前に数分間そこに留まり、決して攻撃しない可能性があります

もちろん、条件が満たされればストライキもキャンセルされます。

決して現れない。私はこの手法を「仮想指値注文」と呼んでいます。

この手法により、最初の注文の発注の遅延とマージンが回避されます。

諸経費をチェックしています。プリロードされた注文を別の注文に移動することにより、

価格に応じて、権利行使時間は新規注文よりも速くなります。

必要に応じて提出してください。とにかく、それは私を「過剰」にします

ただし、これも、修飾子と比較するとかなり控えめです。

本当に虐待的なトレードボットが存在します。 🙂

交換局からの往復の ping 時間は約 45 ミリ秒です。

これを使用すると、注文ストライキのレイテンシーは 60 ~ 80 ミリ秒の範囲になります。

技術。もちろん、注文はすでに行われており、おそらく実行されています

移動されたという確認応答を受け取るまでにいっぱいになります。それで

通常、その直後に実際のフィルに対する ack を受け取ります。

[A] by Kurt (良いものです:)))

IB のバグと機能の比率は次のとおりであるため、IB はおそらくいくつかのバグも追加しました。

いつもかなり高い。あなたはテスターです。それが、次のときの支払い方法です。

手数料がとても安いです。

-カート

[A]  by カート

EClientSocket ソースは、実質的に API ソケット プロトコルのドキュメントです。それは

無料で公開されています。

[A]競合を避けるために sleep() を使用している場合は、設計上の欠陥があります。

[A]

オフ・ザ・ラン先物契約の問題(そして

任意のオプション、またはさらに言えば、取引の少ない株式)

それは、「最後の」価格が信じられないほど古いことが多いということです。

市場を表す唯一の真の指標は市場です

(入札お願いします)

IBゲートウェイアプリ関連

[Q] Linux 用の IB ゲートウェイと TWS API をインストールしますか?

[A] リッチ・ホロウザック (別名「Prof. H.」)

皆さん:

Linux で IB API プログラミングを「始めたばかり」の人のために、Linux で設定するためのステップバイステップのガイドを作成しました。 POSIX C++ テスト クライアントをコンパイルするための基本手順も含めました。これに追加して、ご提案をお待ちしております。

Linux 用の Interactive Brokers IB ゲートウェイと TWS API のインストール

[Q] トレーダー ワークステーション (TWS) 対 IB ゲートウェイ?

ゲートウェイには TWS の GUI がありませんが、同じ API を提供します。

[A1]がスタックオーバーフロー で発見されました

IB はパフォーマンスについて次のように書いています。

IB ゲートウェイは、API 経由で IB 取引システムに接続するための、TWS に代わる低リソースの代替手段を提供します。ゲートウェイは、TWS よりも約 40% 少ないシステム リソースを使用します。ただし、ゲートウェイには GUI がありません。つまり、TWS の実行時のように API アクティビティを表示することはできません。

[A2] IB の技術サポート による

API の観点からは、両方のプラットフォームは同一です。両者の唯一の違いは、TWS には、注文したり、チャートを表示したりできる、より豊富なインターフェイスがあることです。IB ゲートウェイは、IB ゲートウェイを介して接続するための最も基本的な機能を提供することを目的とした、シンプルなインターフェイスを備えた単なるプロキシです。 API。

ただし、より重要なのは、TWS は少なくとも 24 時間ごとに再起動する必要があるのに対し、IB ゲートウェイは無期限に実行できることです。

[Q] IB ゲートウェイと TWS アプリ API の間にパフォーマンスの違いはありますか?

[A]  by Jian Ren

ゲートウェイのメッセージ制限は TWS よりも高く、200 対 50 です。

同時に必要なものがあるので、50 では足りないかもしれません。

ゲートウェイは TWSAPI と FIX の間のブリッジであるため、ゲートウェイ用に書かれたものはすべて

切り替え後、TWSAPI は何も変更せずに動作するようになりました (誰か確認できましたか?)。

あなたが言ったように、FIX接続のみが必要かもしれませんが、IBかどうかはわかりません

小売顧客に提供します。

ジアン

しかし、Kurt 氏は、「ゲートウェイのメッセージ制限が高い」は真実ではないと考えています。引用:

ジャン・レン

ゲートウェイ ログインの説明は確かにわかりにくいです。

IB ゲートウェイからの FIX ログインを選択し、

メッセージ制限が高くなるというコンテキストでのマーケット データ接続

接続の TWSAPI 部分に適用されますか?

表面上は、より低いとされるこのページの情報と矛盾しています。

TWSAPI へのメッセージ制限:

http://individuals.interactivebrokers.com/en/pagemap/pagemap_APISolutions.ph

p

確かに、そこからアクセスした FIX CTCI ページにも次のように記載されています。

「IB ゲートウェイは、市場データを FIX CTCI に配信するためにも使用できます。

顧客は IB API と同じプロトコルを使用します」

(そして「また」という言葉に注目してください)。しかし、それは私に次のような印象を与えません

IB ゲートウェイは、TWSAPI を使用するための 2 つの完全に異なるモードを提供します。

そのうちの 1 つは、より高い (FIX) メッセージ制限を持っています。 「IBゲートウェイソフトウェア」

ドキュメントでは、FIX 顧客は単に許可されているだけであると示唆しているようです

いわば「サイド」での通常の TWSAPI ログインであり、私は次のように考えます。

通常の TWSAPI メッセージ制限が適用されます。 TWSAPI が

接続の一部には別のログインが必要であるということも、これを示唆しています。

また、IB ゲートウェイが TWSAPI 間のブリッジであるとは思えません。

および FIX (特に、FIX は TWSAPI のサブセットのみを提供するため)

機能(上記で参照した URL のグラフによると)ですが、やはり

また、2 つの異なるログインが必要になるためです。

-カート

[Q] 起動時にゲートウェイがクラッシュする – Linux

Linux インストールで TWS または GW を開始するときにこのエラーを見た人がいるかどうか、また、どのように解決したかどうか疑問に思います。

Glib-GIO-ERROR 設定スキーマ `org.gnome.system.proxy' がインストールされていません

投稿者 don_brockhage don.brockhage@gmail.com yahoogroups.com 経由

[A]はい、gsettings-desktop-schemas をインストールする必要がありました。

レオン

レオン・バウム leonbaum2@gmail.com yahoogroups.com より 

[Q]エラー321「メッセージはサポートされていません」の一覧

[A] カート・ビグラー著

エラー321「メッセージはサポートされていません」のリストをここにまとめています。

新しいゲートウェイを使用するときにこれまでに遭遇したエラーに加えて、

私が行った追加のテストの結果。

の一部である 2 文字のコードに従ってこれらをカタログ化しています。

リクエスト検証エラー:-'uc' のようなエラー 321 テキスト

2 文字 ———————原因 ———————————–

コードの以前のレポート C++ アプリの TestJavaClient ボタン

'uc' SET_SERVER_LOGLEVEL

'tc' setServerLogLevel サーバーのログ記録

「パソコン」(不明)

'ec' は RealTimeBars を必要とします

'dc' reqRealTimeBars リアルタイム バーを要求します

'sb' cancelRealTimeBars リアルタイム バーをキャンセルします

「lc」リクエストFAファイナンシャルアドバイザー

「oc」要求ニュース速報

「nc」必須アカウント

奇妙なことに、いくつかの場所で 2 つの異なるコードが取得されているように見えます。

同じ一般的なタイプのリクエストに使用されます。これについては調べていない

さらに遠く。

また、要求アカウントはサポートされていませんが、「管理対象アカウントのリスト」はサポートされていないことに注意してください。

アカウント」は接続後も自動的に送信されますが、これだけで十分です。

必要。

これはすべて Mac 上で、TestJavaClient 9.62 と私の C++ アプリを使用しています。

おおよそ 9.60 に基づいています。

-カート

[Q] IB ゲートウェイの自動ログイン スクリプトは?

[A]  by -カステド

本質的に TWS のストライプダウンバージョンである IB ゲートウェイを使用することもできます。 TWS とは異なり、IB ゲートウェイは 24 時間をはるかに超えて IB への接続を維持しようとします。 IB ゲートウェイが 1 週間以上接続を維持するという保証はありませんが、これは実際に起こります。

したがって、自動ログインを実行してサーバーにパスワードを保存しようとするのではなく、サーバー上で IB ゲートウェイを実行し、IB セキュア ログイン システム (IB セキュリティ デバイスを使用) を使用し、IB パスワードをサーバーに保存せずに、単に再ログインするだけで済みます。 - 必要に応じて手動で認証されます。

Linux サーバー上で実行し、GUI デスクトップではなく HTML UI または Web API 経由で再認証したい場合は、Brokertron Gateway for IB を検討してください。

http://www.brokertron.com/gateway/

-Castedo (IB 向け Brokertron Gateway の開発者)

[Q] リモート IP アドレス (事前に不明) からの TWS および/またはゲートウェイへのクライアント接続を自動的に受け入れるにはどうすればよいですか?

[A] ドミトリー著

未知の (事前の) IP からのリモート クライアントを受け入れるための他の簡単なオプションは、パスワードなしの ssh トンネルを使用することです。

[ゲートウェイ/TWS ホストで SSH を有効にする]

ゲートウェイ/TWS が OS-X 上にある場合

    Google: mac os x で ssh デーモンを有効にする

    ボックスに ssh 接続できることを確認してください。単純なケースとしては、(ボックス自体から) localhost に ssh 接続を試みることです。

    ssh ユーザー名@localhost

ゲートウェイ/TWS ホスト上で ssh デーモンを実行する簡単な手段がない場合は、

LAN 上の他のマシンを使用して「中間者」の役割を果たすことができます。

リモート クライアントは、その中間ボックスへの SSH トンネルを確立します。

次に、ゲートウェイ/TWS への接続を試みます。今回はすべての接続が試行されます。

は、一度だけ信頼されるように構成する静的 IP アドレスから取得されます。

[ファイアウォールでポートフォワードを開く]

NAT の背後にあり、すべての LAN アドレスが 192.168.xx または 10.0.xx のような場合、または他のプライベート アドレスの IP 範囲にある場合

(インターネットに直接公開されない) 場合は、ファイアウォールにポート転送ルールを作成して、言うことをリッスンする必要があります。

ポート 1022 をローカル マシンのポート 22 (ssh) に転送します。

画像を見てください: http://factorial.hu/system/files/images/local_0.png

この美しさを確立するための基本的な ssh トンネルと ssh コマンドを示しています。

[トンネルが機能するために 3 番目のボックスは必要ありません]

上の画像では 3 台のコンピューターの代わりに 2 台のコンピューターを使用することをお勧めします。

この場合、ssh デーモンはポート 22 をリッスンして待機しています。

接続するリモート クライアントは、ゲートウェイ/TWS アプリと同じボックス上に存在します。

joeuser@home とRemote.service.com が 同じボックス (ゲートウェイ/TWS を実行している) 上にあると想像してください。

その後、ゲートウェイ/TWS へのすべての受信接続は 127.0.0.1 から送信されます。

【トンネルを走らせましょう】

リモート クライアント側では、次のようにトンネルを開始します。

ssh -p 1022 -L 7496: 127.0.0.1:7496 dmitry@your_router_host_or_ip.com 

「-p 1022」は、ルーター上で受信 ssh 接続を受け入れる (そして GW/TWS ホストに転送する) ポートです。

「-L 7496:」は、リモート クライアントにローカル ポート 7496 を作成します。

            そのため、GW/TWS に接続するために実行するアプリは、あたかも「127.0.0.1:7496」を使用します。

            すべて GW/TWS 自体と同じホスト上でローカルに実行されます。

            これは任意のポートにすることができます (1024 を超え、他のアプリで使用されないことが望ましいです:)

「127.0.0.1:7496」この部分は、すべてのパケットが送信された後の宛先を説明します。

                  トンネルのもう一方の端 (クライアント アプリのリモート) から飛び出ます。あなたとして

                  GW/TWS std ポートを実行しているローカルホストに移動することがわかります。

[トンネルをテストしましょう]

リモート クライアントで簡単な Telnet コマンドを実行します。

Telnet 127.0.0.1 7496

    127.0.0.1を試しています…

    127.0.0.1に接続されています。

    エスケープ文字は「^]」です。

緑色で強調表示された出力は、接続が確立されたことを示しています (どこか:)

次に、上記の Telnet コマンドを実行する前後で TWS アプリケーションを観察します。

リモートクライアントを受け入れたことに気づきました(GW/TWSクライアントは127.0.0.1から来たため)。

新しい「API」タブが開いていることがわかります (TWS を使用している場合、ゲートウェイがどのように反応するかはわかりません)

接続されているクライアント)。

【パスワードレスにする】

ここで、「パスワードなし ssh」を Google で検索し、ssh クライアント用のキー ペアを生成すれば、準備完了です。

「…からの接続試行を受け入れる」という質問はもう必要ありません。尋ねた!そしてあなたのクライアントも来ることができます

世界中から安全に通信でき、すべての通信は暗号化されます。

ルーターの IP を取得するには (ISP によって動的に変更される場合でも)、月額 25 ドルの DnyDNS を使用するか、Google で「dyndns 代替」を検索します。

[楽しむ!]

これは、「やるべきこと」のすべてのリストの中で最も重要であり、無視されがちな項目です

🙂


0 件のコメント :

コメントを投稿