14

私は現在、クオンツまたは戦略の開発者が独自のカスタム戦略を作成できるようにするトレーディング製品のコンポーネントに取り組んでいます。開発/テストサイクルは数分である必要があるため、これらの戦略をネイティブにコンパイルされた言語 (または vm で実行するためにバイトコードにコンパイルする言語でさえも) で記述させることは明らかにできません。

これまでに lua、python、ruby を見て、本当に楽しんでいましたが、ターゲット ユーザーにとってはまだ少し「低レベル」であることがわかりました。ループ、単純な算術、論理式の評価を最小限にサポートする言語をサポートするために、何らかの形で独自のパーサー + インタープリターを作成する必要がありますか、それとも別の推奨事項がありますか? 前もって感謝します。

4

11 に答える 11

10

PerlのText::Templateモジュールの作者であるMark-JasonDominusは、関連する可能性のあるいくつかの洞察を持っています。

人々がこのようなテンプレートモジュールを作成するとき、彼らはほとんどの場合、置換のための特別な構文を発明することから始めます。たとえば、%%VAR%%のような文字列が$VARの値に置き換えられるように構築します。次に、追加のフォーマットの必要性を認識したため、フォーマット用に特別な構文を追加しました。次に、ループが必要になるため、ループ構文を考案します。すぐに彼らは新しい小さなテンプレート言語を手に入れました。

このアプローチには2つの問題があります。1つは、彼らの小さな言語が機能しなくなっていることです。著者が考えていなかったことをする必要がある場合、あなたは負けます。第二に:誰が別の言語を学びたいですか?

独自のミニ言語を作成すると、同じ苦境に陥る可能性があります。つまり、設計によって機能が低下したツールの文法とパーサーを維持することです。

実際のプログラミング言語が少し低レベルに見える場合、解決策は言語を放棄することではなく、エンドユーザーに高レベルのユーティリティ機能を提供することです。これにより、エンドユーザーは慣れ親しんだ概念で操作できます。基礎となる言語の雑草。

これにより、初心者ユーザーは高レベルで操作できます。ただし、あなたとそのコツを持っているエンドユーザー(スーパーユーザー)は、RubyやPythonなどのすべての機能を引き続き活用できます。

于 2010-02-19T16:51:50.770 に答える
8

ターゲット言語の上に大まかに構築できる、ユーザー向けのある種のドメイン固有言語 (DSL) を作成する必要があるようです。Ruby、Python、および Lua にはすべて、構文に関するさまざまな癖があり、これらのいくつかは、巧妙な関数定義である程度調整できます。

かなり堅牢な DSL の例は、入力データに適用される一連の正規表現を通じて、ユーザー指定の言葉遣いを実際の実行可能コードに変換する興味深い戦略を実装するCucumberです。

もう 1 つの候補は、JavaScript、またはある種の DSL から JavaScript へのブリッジである可能性があります。これにより、戦略をクライアント側またはサーバー側で実行できるようになります。クライアント マシンは負荷の高いサーバーに比べて計算能力が余っていることが多いため、これはアプリケーションのスケーリングに役立つ場合があります。

于 2010-02-19T16:43:01.043 に答える
1

何を選択しても、会社の高レベルの構造を定義するカスタムメイドのモジュールが必要になります。

私が想定しているニーズのいくつかを以下に示します。現在のポジション、現在および過去のクオート、以前のパフォーマンス データなどをアプリケーションに取り込む方法など、既にカバーされているものもあるかもしれません。さまざまな種類の注文 (指値/成行/停止、取引所、トリガー) またはオプションのパラメーターなどを定義/バックテスト/送信します。実際のテストと同様に、おそらく複数のサンドボックスが必要になるでしょう。

クオンツは、行列演算、確率計算、偏微分方程式を実行できるようにしたいと考えています。
Python で実行する場合は、NumPy をロードすることから始めます。

また、Mathematica や Matlab の上に構築されたものなど、数学的金融研究を行うように設計された独自のシステムから始めることもできます。

于 2010-02-19T16:42:46.713 に答える
1

MATLAB をスクリプト言語として使用するバックテスト フレームワークについては、http: //www.tadeveloper.com を参照してください。MATLAB には非常に強力であるという利点がありますが、プログラマーでなくても使用できます。

于 2012-12-22T06:14:24.940 に答える
1

私は Python Algorithmic Trading Library に取り組んできました (実際にはバックテスト用であり、実際の取引用ではありません)。ぜひご覧ください: http://gbeced.github.com/pyalgotrade/

于 2012-04-14T03:40:10.677 に答える
0

私はCommonLispを使用します。これは、迅速な開発(実行中のイメージがあり、個々の関数をコンパイル/再コンパイルできます)をサポートし、ドメインに合わせて言語を調整します。戦略を表現するための構成要素として関数とマクロを提供し、ユーザーはこれらを組み合わせるために言語全体を利用できます。

于 2010-02-19T17:09:42.553 に答える
0

これは少し単純かもしれませんが、多くのquantユーザーはExcelおよびVBAマクロの操作に慣れています。VBSCriptのようなものは、この分野である程度の経験があるかもしれないので、使用できるでしょうか。

于 2010-02-19T16:45:00.237 に答える
0

既存の言語は「ターゲットユーザーにとっては少し「低レベル」」です。

それでも、必要なのは「ループ、単純な算術、論理式の評価の最小限のサポート」だけです。

問題はありません。必要な機能はごくわずかです。提供した言語のリストの何が問題になっていますか?彼らは実際にそれらの機能を提供していますか?

切断とは何ですか?問題が何であるかを拡張するために、質問を更新してください。

于 2010-02-19T16:49:00.653 に答える
0

Processingのラインに沿ったものは、あなたが目指している複雑さのレベルですか? 処理は、本格的な言語 (Java) を使用して、使用可能な構文を問題領域 (処理の場合の問題領域 = 視覚化) に適用可能なサブセットのみに縮小/単純化する良い例です。

以下は、Processing ドキュメントからの比較です。

ジャワ:

g.setColor(Color.black)
fillRect(0, 0, size.width, size.height);

処理:

background(0);

他の人が示唆しているように、複雑さのほとんどがユーザーから隠されるように十分な高レベル関数を単純に記述できるかもしれませんが、必要に応じてより低レベルのことを行う能力を保持します。Arduinoの Wiring 言語は、C の上に高レベル関数の薄いレイヤーを使用して、非プログラマーや愛好家がよりアクセスしやすくするという戦略に従います。

于 2010-02-19T18:45:26.510 に答える
0

最初に言語を定義します。可能であれば、EBN と呼ばれる疑似言語を使用します。これは非常に簡単です (ウィキペディアのエントリを参照してください)。

それができたら、言語を選択します。ほとんどの場合、DSL を使用したいと思うでしょう。Ruby と Lua はどちらもそれが得意です。

作業を開始すると、定義に戻って微調整することに気付く場合があります。でも、それが物事を行う正しい順序だと思います。

于 2010-02-19T18:12:27.287 に答える
0

私は同じ船の建物にいて、自分のソフトウェアで取引をしています。あなたが言うように、より高いレベルのものが欲しいので、Javaは素晴らしいものではありません。Eclipse プロジェクト xtext を使用して多くの成功を収めました。http://www.eclipse.org/Xtextパーサーなどを構築するためのすべての配管が行われ、Eclipse を使用すると、関数エディターでコードをすばやく生成できます。他のオプションも検討するので、これを検討することをお勧めします。これを eclipse モデリング フレームワークと組み合わせると、必要な DSL をすばやく構築するのに非常に強力です。- ダンカン

于 2012-08-05T03:36:24.767 に答える