MQL5言語をゼロから独学で学ぶ - ページ 75

 

皆さん、ご機嫌いかがでしょうか?

プログラミング言語「MQL5」の勉強を続けています。私はVasiliy Sokolovのコードに 小さな変更を加え、Expert Advisorのアルゴリズムで元々意図されていたように、1日1ポジションのみ オープンするようにしました。変更箇所は黄色で表示されます。

ウラジミールさん、よろしくお願いします。

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- Зададим условия для открытия позиций BUY и SELL
   double price=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
   double point=SymbolInfoDouble(Symbol(),SYMBOL_POINT);
   int digits=(int)SymbolInfoInteger(Symbol(),SYMBOL_DIGITS);
   price=NormalizeDouble(price,digits);

   if(IsMainPositionOpen() == false && IsTimeForOpen())
     {
      if(TickUP()==(price+point))
         OpenBUY();
      else
        {
         if(TickDOWN()==(price-point))
            OpenSELL();
        }
     }
   if(IsTimeForClose())
      CloseALL();
 
Vasiliy Sokolov:

OnInitブロックも考えすぎで、まだかなり正しく書けていません。まず、数字ではなく、識別子を書くようにすることです。1の代わりにINIT_SUCCEEDEDEDを返す。第二に、ここではswitchが過剰である。このコードには、ifかswitchのどちらかが含まれている必要があります。まず片方を書いてから、もう片方を書く--まさにオイル。

第三に、すべてのアカウントの種類を監視する必要があります。Demoがあり、Realがある。そして、「コンテスト」です。しかし、たとえ第3のアカウントがなかったとしても、他のすべてのバリエーションを キャッチするスタブがあるはずです。

おそらく、例外がどのように機能するかを説明する方が合理的でしょう。そうでなければ、なぜ知らないものに対して全く制御ができないのか、理解できないでしょう。

大げさに言えば、次のようになるはずだ。

1. 実行するプログラムの起動

2.アルゴリズムを通しての作業と、アルゴリズムからの出口の2方向から。

a) 正解 - アルゴリズムは正しく動作した

b) 誤り - アルゴリズムは機能していない

同時に、a)で解決するということは、プログラマーが実装したいオプションがすべて満たされ、b)ではそれ以外のものがすべて満たされ、それが必要であるかどうかは問題ではない、ということでもある。つまり、プログラマーは自分が欲しい機能だけを実装し、それ以外のものは排除すべきなのです。

 
Konstantin:

例外の仕組みを説明する方が意味があるのでしょうが、そうでなければ、なぜ知らないものまで制御しなければならないのか、理解が得られません。

最も大げさに言えば、次のようになるはずだ。

1. 実行するプログラムの起動

2.アルゴリズムを通しての作業と、アルゴリズムからの出口の2方向から。

a) 正解 - アルゴリズムは正しく動作した

b) 誤り - アルゴリズムが失敗した

同時に、a)で解決するということは、プログラマーが実装したいオプションがすべて満たされ、b)ではそれ以外のものがすべて満たされ、それが必要であるかどうかは問題ではない、ということです。つまり、プログラマは自分が挿入した機能だけを実装し、それ以外は例外として投げ出すべきなのです。

Konstantinさん、こんにちは!分かりやすい説明ありがとうございます。

このスレッドに参加された皆様へ改 めて、MQL5プログラミング 言語を習得する上で、建設的な提案やアドバイスをいただいた皆様に感謝いたします。

今のところ、本業の関係で独学に多くの時間と注意を割くことができないため、一時中断していますが、とりあえずプログラミングの基本を理解し、サードパーティのコードを読み、自分で関数を書くという主な結果は得られています。

Trailing_Stop (v.1).mq5 Expert Advisor のバージョンには、各コード行に詳細なコメントを付けて、先に約束したように、プログラミングスクールの1年生がアクセスできる形で、もう少し後に公開する予定です。

ウラジミールさん、ありがとうございます。

 

皆さん、ご機嫌いかがでしょうか?

プログラミング言語「MQL5」の勉強を続けています。ようやく、プログラミングスクールの1年生が理解できるような形で、各コード行に詳細なコメントをつけたExpert Advisorのバージョンを書くだけの時間ができました。Expert Advisorのコードはかなりかさばるので、Trailing_Stop_gv.22.mq5という ファイルとして公開しています。

コードを公開する前に、ストラテジーテスターでExpert Advisorをチェックしました。問題は見つかりませんでした。Expert Advisor では、ポジション会計のネッティング方式が採用されています。この会計制度は、口座上のある時点で、1つの同じシンボル(証券)に対して1つのオープンポジションしか存在し得ないことを意味します。

現時点では、Expert Advisorに機能が実装されています。

  1. インストールする予定の取引口座を確認してください。Expert Advisor がデモ口座にインストールされる場合、メッセージ ボックスに作業を続行する許可が表示されます。Expert Advisor をリアル口座に インストールしようとすると、メッセージウィンドウに動作を継続できない旨の警告が表示され、取引端末のワークウィンドウから自動的に削除されます。
  2. 1取引日に1回、モスクワ時間の午前9時ちょうどに、最初のティックが指示された方向に自動的に1ポジションを建てる。例えば、モスクワ時間午前9時に最初のティックが上向きになれば買いポジション、下向きになれば売りポジションを建てることになります。
  3. 敷地面積を設定します。
  4. ストップロスのサイズを設定します。
  5. 始値を基準にして、ストップロスをブレイクイーブンに移動させるレベルを指定します。
  6. ストップロスのトレーリングステップを設定します。

このバージョンのExpert Advisorは、Vasily Sokolovが以前に提案したヒントの大部分を実装して います。

警告!!!

このExpert Advisorは、デモ口座の自習プランに従って開発されたもので、トレーニングのみを目的としたものです実際の口座で取引し、利益を 上げるためのものではありません。

敬具 ウラジミール

ファイル:
 
MrBrooklin:

皆さん、ご機嫌いかがでしょうか?

プログラミング言語「MQL5」の勉強を続けています。ようやく、プログラミングスクールの1年生が理解できるような形で、各コード行に詳細なコメントをつけたExpert Advisorのバージョンを書くだけの時間ができました。Expert Advisor のコードはかなり面倒なので、Trailing_Stop (v.2).mq5 というファイルとして公開しています。

コードを公開する前に、ストラテジーテスターでExpert Advisorをチェックしました。問題は見つかりませんでした。Expert Advisor では、ポジション会計のネッティング方式が採用されています。この会計制度は、口座上のある時点で、同じシンボル(金融商品)のオープンポジションが1つしか存在できないことを意味します。

現時点では、Expert Advisorに機能が実装されています。

  1. インストールする予定の取引口座を確認してください。Expert Advisor がデモ口座にインストールされる場合、メッセージ ボックスに作業を続行する許可が表示されます。Expert Advisor をリアル口座に インストールしようとすると、メッセージウィンドウに動作を継続できない旨の警告が表示され、取引端末のワークウィンドウから自動的に削除されます。
  2. 1取引日に1回、モスクワ時間の午前9時ちょうどに、最初のティックが指示された方向に自動的に1ポジションを建てる。例えば、モスクワ時間午前9時に最初のティックが上に向かえば買いポジション、下に向かえば売りポジションを建てることになります。
  3. 敷地面積を設定します。
  4. ストップロスのサイズを設定します。
  5. 始値を基準にして、ストップロスをブレイクイーブンに移動させるレベルを指定します。
  6. ストップロスのトレーリングステップを設定します。

このバージョンのExpert Advisorは、Vasily Sokolovが以前に提案したヒントの大部分を実装して います。

警告!!!

このExpert Advisorは、デモ口座の自習プランに従って開発されたもので、トレーニングのみを目的としたものです実際の口座で取引し、利益を 上げるためのものではありません。

敬具 ウラジミール

こんにちは! - コンパイルできません。

トレイリングストップ_gv.22.mq5

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Trailing_Stop(v.2) Expert Advisorを作成するための括弧を除いた名前です。

 
SanAlex:

こんにちは - コンパイルできません。

こんにちは!ちょうどウェブサイトからファイルをダウンロードし、私のMetaEditorでチェックし、すべてが正常にコンパイルされます。

ウラジミールさん、ありがとうございます。

 
MrBrooklin:

こんにちは!ちょうどウェブサイトからファイルをダウンロードし、私のMetaEditorでチェックし、すべてが正常にコンパイルされます。

ウラジミールさん、ありがとうございます。

Expert Advisorを作成するときに、名前を正しく入力していなかったのですが、すべてうまくいきました。

 
SanAlex:

エキスパート作成時に名前を正しく入力していなかったのですが、すべてうまくいきました。

どういたしまして。

ウラジミールさん、ありがとうございます。

 

このスレッドに参加された皆様へ

改めて、MQL5プログラミング 言語の基本を学ぶ上で、建設的な提案、ヒント、アドバイスをいただいた皆様に感謝いたします。Vasily Sokolov 氏に感謝します。皆さんに神の祝福がありますように。

ウラジミール、みんなに大いなる敬意を表して。

 

皆さん、ご機嫌いかがでしょうか?

プログラミング言語「MQL5」の勉強を続けています。現在、新しいEAのコードを書いているところです。1点だけ、解決方法がよくわからない点があります。EAの入力パラメータに設定されている通貨ペアのチャート上でExpert Advisorを動作させたいのですが、簡単そうに見えます。他の通貨ペアのチャートにインストールしようとした場合(例えば、間違って)、Expert Advisorは作業を継続できない旨の警告を表示する必要があります。

以下は、プログラムコードの概要です。

input string Symbol_Main="GBPUSDrfd";  //Валютная пара, на которую ставим советник

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   /* Определим график валютной пары, на который будем устанавливать советник*/
   string currency_chart=SymbolInfoString(Symbol(),SYMBOL_DESCRIPTION);
   if(currency_chart==Symbol_Main) //если график валютной пары совпадает со входным параметром
     {
      /* выводим окно сообщений на торговом терминале и продолжаем работу советника */
      MessageBox("Работа советника на данной валютной паре разрешена!");
      return(INIT_SUCCEEDED); //возвращаем для функции OnInit значение означающее "удачная инициализация"
     }
   else //в противном случае, если график валютной пары не совпадает со входным параметром
     {
      /* выводим окно сообщений на торговом терминале и закрываем советник */
      MessageBox("Работа советника на данной валютной паре запрещена! Выходим!");
      return(INIT_FAILED); //возвращаем для функции OnInit значение означающее "неудачная инициализация"
     }
  }

コンパイラはエラーを表示しない。動作しないコードは黄色でハイライトされています。それは、 SYMBOL_DESCRIPTION 識別子 文字列の説明)の意味がよくわからないからかもしれません。他の識別子も使ってみましたが、結果は同じです。も しかして、 SymbolInfoString() 関数は ここでは全く必要ないのでしょうか?通貨ペアの名前をGBPUSDrfdと 書いたのは、Alpha-ForexのExpert Advisorを使う予定だからで、このブローカーのシンボルはすべてrfdという 語尾になっています。

Expert Advisorの皆様、どのような方向で考えればよいのか、アドバイスをお願いします

ウラジミールさん、ありがとうございます。