Handeln Sie nach Ihrer eigenen Strategie? Wenn Sie Ihre Handelsregeln formalisieren und als Algorithmus für ein Programm beschreiben können, wäre es doch besser, Ihren Handel einem automatisierten Expert Advisor anzuvertrauen. Ein Roboter braucht weder Schlaf noch Nahrung und ist keinen menschlichen Schwächen unterworfen. In diesem Artikel zeigen wir Ihnen, wie Sie, um einen Handelsroboter im Freelance-Service in Auftrag zu geben, das sogenannte Pflichtenheft erstellen.
MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
Eine Überwachung des aktuellen Status eines Handels-Account bedeutet offene Positions und Order kontrollieren zu können. Bevor ein Handelssignal zu einem Abschluss wird, sollte es vom Client-Terminal als Anfrage zum Handels-Server geschickt werden, wo es in eine Order-Warteschlange gestellt wird und auf seine Bearbeitung wartet. Eine Anfrage vom Handels-Server annehmen, sie löschen, wenn sie abläuft oder auf ihrer Grundlage einen Abschluss ausführen - alle diese Handlungen haben Handelsereignisse zur Folge, und der Handels-Server informiert das Terminal entsprechend darüber.
Dieser Beitrag beschäftigt sich mit dem Objekt-orientierten Ansatz, um das zu machen, was wir bereits im Artikel "Schrittweiser Leitfaden zum Schreiben eines Expert Advisors in MQL5 für Anfänger" getan haben - einen einfachen Expert Advisor erstellen. Die meisten Menschen glauben, das sei schwer, doch ich darf Ihnen versichern: wenn Sie diesen Beitrag gelesen haben, dann können Sie Ihren eigenen Objekt-orientierten Expert Advisor schreiben.
皆さんこんにちは、
現在、SamuelのEAをデモ口座で動かしていますが、とても満足しています。良いプログラムです!
しかし、弱点もあります:
チャートの谷のターニングポイントで売りオプションが山積みになり、対応するピークで買いオプションが同じように山積みになります。私はこれをプログラムし直したいと思っています。つまり、日中に買い、ピークで売るのですが、今のところ私の試みは失敗しています。私はMQL5の初歩的な知識しかありません。
どなたか教えてください。
よろしくお願いします!
EAが収益性の高いポジションを取る他のポイントも逆になってしまうので、これは通常機能しません.
しかし、これを読んでください:
EA-freelancer specifications :https://www.mql5.com/ja/articles/4368
Indi :https://www.mql5.com/ja/articles/4304
MQL5とMQL4でトレーディングロボットを注文する方法 :https://www.mql5.com/ja/articles/117
このヒントがあれば、あなたのアイデアをより正確に指定することができます。それが機能するかどうかを確認するためだけのものであっても、支払いの有無に かかわらず、誰かにそれを依頼するためのものであってもかまいません。
皆さんこんにちは(特に親愛なる著者)。
この記事に沿ってコーディングしました。とても楽しく、多くのことを学びました。
このような有益な記事を書いてくれてありがとう。
しかし、問題があります。私のEAは注文を出しませんでした。著者のコードをダウンロードしましたが、それも注文を出しませんでした。
この記事は13年前のものなので、コードはもう古くなっていると思います。どなたか教えてください。
私のコードは以下のファイルです。ありがとうございました。
こんにちは、私は初心者ですので、悪口はあまり言わないでください。)
ジェネレーターを使ってExpert Advisorを作成したいと思いました。
前の取引が終了した直後ではなく、例えばローソク足1本分後に取引を開始したいのです、
何か書こうとしたのですが、結局エラーになってしまいます。
誰かがこれを助けるか、またはエラーとそれを修正する方法を示すことができますか?
そして、ここで実際のコードです:
//+------------------------------------------------------------------+
//| ParExpert.mq5
//| 著作権 2022, MetaQuotes Ltd.
//|https://www.mql5.com|
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd.".
#property link"https://www.mql5.com"
#プロパティバージョン "1.00"
//+------------------------------------------------------------------+
//| インクルード
//+------------------------------------------------------------------+
#インクルード <ExpertExpert.mqh
//--- 利用可能なシグナル
<include <ExpertSignalSAR.mqh> //--- 利用可能なシグナル
//--- 利用可能な末尾
<include <ExpertTrailing↩TrailingFixedPips.mqh> //--- 利用可能な資金管理
//--- 利用可能な資金管理
#include <ExpertMoneyMoneyFixedLot.mqh> //---資金管理可能
//+------------------------------------------------------------------+
//| 入力
//+------------------------------------------------------------------+
//--- エキスパート用入力
input string Expert_Title = "ParExpert"; // ドキュメント名
ulong Expert_MagicNumber = 24195; // エキスパート番号
bool Expert_EveryTick = false; // エブリーチックの入力
//--- メイン・シグナル用入力
input int Signal_ThresholdOpen = 10; // オープンにするシグナルのしきい値 [0...100]
input int Signal_ThresholdClose = 0; // シグナルのしきい値 [0...100] をクローズする。
input double Signal_PriceLevel = 0.0; // 取引を実行する価格レベル
input double Signal_StopLevel = 500; // 損切りレベル(ポイント単位)
input double Signal_TakeLevel = 70; // 利益確定レベル(ポイント単位)
input int Signal_Expiration = 4; // 保留注文の有効期限(バー単位)
input double Signal_SAR_Step = 0.02; // パラボリックSAR(0.02,0.2)の速度増分
input double Signal_SAR_Maximum = 0.2; // パラボリック SAR(0.02,0.2) 最大レート
input double Signal_SAR_Weight = 0.6; // 放物線SAR(0.02,0.2)の重さ [0...1.0] //--- 後輪の重さの入力。
//--- トレーリングの入力
input int Trailing_FixedPips_StopLevel = 0; // ストップロスのトレイリングレベル (ポイント)
input int Trailing_FixedPips_ProfitLevel= 10; // テイク・プロフィットのトレイリング・レベル (ポイント単位)
//--- 資金の入力
input double Money_FixLot_Percent = 10.0; // パーセント
input double Money_FixLot_Lots = 0.1; // 固定数量
//--- 取引クールダウンの入力
input int Expert_TradeCooldown = 1; // 取引間のクールダウン期間 (バー単位)
//+------------------------------------------------------------------+
//| グローバルエキスパートオブジェクト
//+------------------------------------------------------------------+
CExpert ExtExpert;
//+------------------------------------------------------------------+
//| エキスパートの初期化関数
//+------------------------------------------------------------------+
int OnInit()
{
//--- エキスパートの初期化
if (!ExtExpert.Init(Symbol(), Period(), Expert_EveryTick, Expert_MagicNumber))
{
//--- 失敗
printf(__FUNCTION__ + ": エラーのエキスパートの初期化");
ExtExpert.Deinit();
return (INIT_FAILED);
}
//--- シグナルの作成
CExpertSignal *signal = new CExpertSignal;
if (signal == NULL)
{
//--- 失敗
printf(__FUNCTION__ + ": シグナル作成エラー");
ExtExpert.Deinit();
return (INIT_FAILED);
}
//---
ExtExpert.InitSignal(signal);
signal.ThresholdOpen(Signal_ThresholdOpen);
signal.ThresholdClose(Signal_ThresholdClose);
signal.PriceLevel(Signal_PriceLevel);
signal.StopLevel(Signal_StopLevel);
signal.TakeLevel(Signal_TakeLevel);
signal.Expiration(Signal_Expiration);
//--- フィルタの作成 CSignalSAR
CSignalSAR *filter0 = new CSignalSAR;
if (filter0 == NULL)
{
//--- 失敗
printf(__FUNCTION__ + ": filter0作成エラー");
ExtExpert.Deinit();
return (INIT_FAILED);
}
signal.AddFilter(filter0);
//--- フィルタのパラメータを設定する
filter0.Step(Signal_SAR_Step);
filter0.Maximum(Signal_SAR_Maximum);
filter0.Weight(Signal_SAR_Weight);
//--- トレーリング・オブジェクトの作成
CTrailingFixedPips *trailing = new CTrailingFixedPips;
if (trailing == NULL)
{
//--- 失敗
printf(__FUNCTION__ + ": error creating trailing");
ExtExpert.Deinit();
return (INIT_FAILED);
}
//--- エキスパートに末尾を追加する(自動的に削除されます))
if (!ExtExpert.InitTrailing(trailing))
{
//--- 失敗
printf(__FUNCTION__ + ": trailingの初期化エラー");
ExtExpert.Deinit();
return (INIT_FAILED);
}
//--- トレーリング・パラメーターを設定する
trailing.StopLevel(Trailing_FixedPips_StopLevel);
trailing.ProfitLevel(Trailing_FixedPips_ProfitLevel);
//--- マネーオブジェクトの作成
CMoneyFixedLot *money = new CMoneyFixedLot;
if (money == NULL)
{
//--- 失敗
printf(__FUNCTION__ + ": error creating money");
ExtExpert.Deinit();
return (INIT_FAILED);
}
//--- エキスパートにお金を追加する(自動的に削除されます))
if (!ExtExpert.InitMoney(money))
{
//--- 失敗
printf(__FUNCTION__ + ": お金の初期化エラー");
ExtExpert.Deinit();
return (INIT_FAILED);
}
//--- マネーパラメータを設定する
money.Percent(Money_FixLot_Percent);
money.Lots(Money_FixLot_Lots);
//--- すべての取引オブジェクトのパラメータをチェックする
if (!ExtExpert.ValidationSettings())
{
//--- 失敗
ExtExpert.Deinit();
return (INIT_FAILED);
}
//--- 必要なすべてのインジケータのチューニング
if (!ExtExpert.InitIndicators())
{
//--- 失敗
printf(__FUNCTION__ + ": インジケータの初期化エラー");
ExtExpert.Deinit()を実行します;
return (INIT_FAILED);
}
//--- 最終取引時間変数を初期化
datetime lastTradeTime = 0;
ExtExpert.SetVariable("LastTradeTime", lastTradeTime);
//--- OK
return (INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| エキスパートの初期化関数
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
ExtExpert.Deinit();
}
//+------------------------------------------------------------------+
//| イベントハンドラ関数
//+------------------------------------------------------------------+
void OnTick()
{
//--- 最後の取引からの時間をチェックする
datetime lastTradeTime = ExtExpert.GetVariable("LastTradeTime");
int cooldownBars = Bars - ExtExpert.GetBarShiftByTime(Symbol(), Period(), lastTradeTime);
if (cooldownBars < Expert_TradeCooldown)
{
//--- 取引のクールダウン期間が経過していない、新しい取引を開始するのをスキップする
を返します;
}
ExtExpert.OnTrade();
}
//+------------------------------------------------------------------+
//| トレード」イベントハンドラ関数
//+------------------------------------------------------------------+
void OnTrade()
{
ExtExpert.OnTrade();
}
//+------------------------------------------------------------------+
//| タイマー」イベントハンドラ関数
//+------------------------------------------------------------------+
void OnTimer()
{
ExtExpert.OnTimer();
}
//+------------------------------------------------------------------+
みなさん、 こんにちは😊。
マリオ31415927
これは単にティッカーで、新しい期間または新しいバー(何でも)のたびに変数があるためです:
がリセットされるからです。
これはコードの中で比較的すぐに見つけることができます。
しかし、これが意図されたものなのか、もしそうなら、どのようにしてすべてのポジションを再びクローズするのかという疑問が生じる。
おそらく、この文脈でのTRADE_ACTION_DEAL注文タイプを理解していないのでは?
取引注文プロセスは、単純に取引クラス Trade に適合させることもできます。例えば
よろしくお願いします:-)読み方: https://www.mql5.com/ja/articles/232
注文、ポジション、取引の違いと関係について説明します。後者はブローカー側の予約プロセスを反映したものです。
https:// www.mql5.com/de/articles/232
注文、ポジション、取引の違いと関係について説明します。後者はブローカー側の予約プロセスを反映している。
こんにちは、カール、
ヒントをありがとう!
しかし、訂正しなければなりません。
変数が新しい期間ごとにリセットされるのは事実です:
しかし、それに応じてポジションがあれば、再び設定されます。
しかし、買い(POSITION_TYPE_BUY)は正しく照会されるのに、売り(POSITION_TYPE_SELL)は照会されないという現象を経験しています。変数が設定されていないのでしょうか?
コードを一歩一歩デバッグしなければなりません。これは論理エラーとしか 思えません😉。
Sell_opened =true;// これは売り。
やれやれ、今日は調子に乗ってしまった。
一度しか照会されない。これがエラー。)
全ポジションを以下のように検索する;
確かにエラーでした、ウェブファイルのようです。
内容を元に自分で書き直してアップしました。初めてなので詳しいことは分かりません。お役に立てれば幸いです。
テスター - "サポートされていない充填モード"
3つの異なるブローカーで試しました。何が問題ですか?