English Русский 中文 Español Deutsch Português 한국어 Français Italiano Türkçe
より優れたプログラマー(第02部): MQL5プログラマーとして成功するためにやめなければいけない5つのこと

より優れたプログラマー(第02部): MQL5プログラマーとして成功するためにやめなければいけない5つのこと

MetaTrader 5トレーディングシステム | 11 10月 2021, 10:53
737 0
Omega J Msigwa
Omega J Msigwa

はじめに


この連載では、MQL5プログラミングの経験が少ない人を表すのに初心者という言葉をよく使用します(気を悪くしないでください)。説明しやすくなるのです。これは、この記事が初心者のみを対象としているという意味ではありません。まったく違います。この記事は、プログラミング経験に関係なく、すべての人を対象としています。なぜなら、初心者かどうかを決めるのは、コーディングの習慣と振る舞いで、コーディングの年数ではないからです。

初心者_vs_プロのコーダー 


最初の記事はこちらですので、まだ読んでいない方はご覧ください。それでは、初心者をプロに変える使命を続けることにします。

01: 自分が他の人よりも優れていると考えるのをやめる


しばらくコーディングをしていて、フリーランスやコードベースなどで自分と顧客のためにいくつかの素晴らしいEAとインジケーターを作成することができたとします。自分の進歩に気づき、それを大きな課題に取り組む自信を高めて改善するのに使い、傲慢な方法で使わないのはいいことです。以下を念頭に置いてください。

「傲慢な人間は自分が完璧だと思っている。これは無知の主な害悪である。それは、より良い人間になるという、人生の中心的な課題を妨げるのである。」

— レオ・トルストイ

自分が非常に賢しいと感じ、他の人のコードを完全に理解せずに批判したり、フォーラムで質問に攻撃的な方法で答えて、いかに自分が偉大なコーダーで質問者のコーディングが酷いかということを示したりするのはとても簡単です。 フォーラムで質問をする人はよく、自分のコードを投稿して前に試して機能しなかったことを説明します。そこに突然初心者が現れ、質問者がひどく間違っていると発言します。解決策を提供しない、または、トピックを始めた質問者によって提供されたコードよりも不正確なコード(この場合はコード)を提供してです。何ということでしょう。


初心者の回答


トピックを始めた人がひどく間違っているといって正しい形式でもないコードを提供するかわりに、なぜ、詳細で明確な方法で問題の理由から始めて何をする必要があるのかを説明しないのでしょうか。

フォーラムでトピックを始めるのは楽しいことではありません。フォーラムでトピックを始めた人は誰でも、自分が何らかの形で間違っていて、それが望ましい結果を得ることができない理由であることをすでに知っています。トピックを始めた人は初心者であり、何日ではないにしても何時間も問題に苦しんでいる可能性が高いです(私にはこれがどのようにふうに感じるかがわかります)。

いきなり解決策に飛び付いて、説明なしのコードや不明瞭なコードをコピペしても、質問者の問題は長期的には解決しません。それは、手術が必要な人に鎮痛剤を与えるようなものです。これを行えば、この連載の最初の記事で最初に説明した最悪の習慣であるコピー&ペーストの習慣を初心者に教えることになります。つまり、初心者は「このコードなら動くんだ。問題があったらフォーラムにコードを投稿すれば、誰かが代わり動くコードを提供してくれるんだ。最高。」 と考えるようになるのです。

質問者のほとんどは初心者であるため、常に明確で詳細かつ初心者に優しい方法で解決法を説明するようにしてください。また、将来同じ問題に遭遇する初心者がたくさんいて、おそらくそのトピックからの解決策が必要になることを覚えておいてください。 

その例とは別に、自分が他の人よりも優れていると考える人は、フォーラムで間違った答えを提供したり、コードベースで誤ったレビューを提供したりすることになります。コードがあなたが思っているように、またはあなたが好きで慣れ親しんでいる方法でそれほど複雑ではないことがわかったという理由だけで、自分がその特定のシステムの作者よりも優れていると考えることによって、私たちはコードはそもそも書かれていたので方法と理由を完全に理解することを拒否する傾向があります。そしてこれは無知につながります。

02: 固定概念持つことを避ける 


特定の分野で得意になることができる方法がないと考えるのはやめてください。

「狂気とは、同じ行動を繰り返しながら違う結果を望むことである。」
- アルバート・アインシュタイン


同じタイプのエキスパートアドバイザー、インジケーター、スクリプトなどを作成することに固執しないでください。創造性が破壊され、同じ場所にとどまり続けることになります。特定のプログラミング分野が複雑すぎたり難しすぎたりするという理由だけで、その分野が得意になれないと考えるのは自己制限的ですj。脳は柔軟で、新しい刺激に適応して変化するように設計されています。挑戦すればするほど、その特定の主題がより得意になるでしょう。次は例です。

そして考えられるすべて。しかし、それを実現するには十分な労力を費やす必要があります。

もちろん、これまでのところ、聖杯EA(私は見たことがありません)やインジケーターはありませんが、これは、アプローチを変更することでシステムを可能な限り改善することを妨げるものではありません。

MQL5プログラミングを始めたばかりのころ、コードベースから単純移動平均のようなものをダウンロードしてコードが1000行以上であることがわかったときはとても怖かったです。コードを調べたのは初めてだったからです。複雑すぎると思いました。これは、初心者が直面しているのと同じ問題だと思います。

私は今は少し経験があります。私が言えるのは、今は難しいかもしれないが、大丈夫だということだけです。人生のすべてのものは最初はこんなものですが、時間と労力だけがそれが簡単であることを教えてくれます。

03: いつか使われるコードを書くのをやめる


プロジェクトでEAまたはインジケーターを作成しているとします。コードの行が多くなりすぎています。あまり注意を払わず、コードを注意深く読み直さないと、不要な未使用のコードが存在する可能性が高くなります。


「知識を持っている者は予測しない。予測する者には知識がない。」
— 老子

コードがより少なければ、常に次になります。 

  • バグが少ない
  • 読む時間が少ない 
  • コンパイルが簡単 
  • レビューが速い 
  • 配信が速い
  • 保守可能 
  • デバッグが簡単
今は必要のないコードを書くのに多くの時間を費やさないでください。

MQL5プログラミング歴で他の以下のようなものをご覧になったことがあるかもしれません。

int MathRandInt(int mini, int maxi)
  {
   double f   = (MathRand() / 32768.0);
   return mini + (int)(f * (maxi - mini));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void chart_random()
 {
//---
  string background[]={"clrBlack"};
  string bulls[]={"clrGreen","clrDeepPink","clrYellow","clrCrimson","clrMediumBlue","clrKhaki","clrYellow"};
  string bears[]={"clrDarkViolet","clrDarkOrange","clrIndigo","clrWhite","clrSilver","clrMediumPurple","clrBlue"};
//---
   ChartSetInteger(ChartID(), CHART_MODE, CHART_CANDLES);
   ChartSetInteger(ChartID(), CHART_SHOW_GRID, false);
   ChartSetInteger(ChartID(), CHART_AUTOSCROLL, true);
   ChartSetInteger(ChartID(), CHART_SHOW_PERIOD_SEP, true);
   ChartSetInteger(ChartID(), CHART_SHIFT, true);
   ChartSetInteger(ChartID(), CHART_SHOW_ASK_LINE, true);
   ChartSetInteger(ChartID(), CHART_SHOW_BID_LINE, true);
   ChartSetInteger(ChartID(), CHART_COLOR_ASK, clrBlue);
   ChartSetInteger(ChartID(), CHART_COLOR_BID, clrCrimson);
   ChartSetInteger(ChartID(), CHART_SCALE, 2);
   ChartSetInteger(ChartID(), CHART_FOREGROUND, true);
   ChartSetInteger(ChartID(), CHART_COLOR_FOREGROUND,clrWhite);
//---
/*
 for (int i=0; i<ArraySize(background); i++){
     int maxi=ArraySize(background);
     int random_=MathRandInt(0,maxi);
    ChartSetInteger(0,CHART_COLOR_BACKGROUND,StringToColor(background[random_]));
    }
  for (int i=0; i<ArraySize(bulls); i++){
    ChartSetInteger(0,CHART_COLOR_CANDLE_BULL,StringToColor(bulls[MathRandInt(0,ArraySize(bulls))]));
    ChartSetInteger(0,CHART_COLOR_CHART_UP,StringToColor(bulls[MathRandInt(0,ArraySize(bulls))]));
   }
  for (int i=0; i<ArraySize(bears); i++){
    ChartSetInteger(0,CHART_COLOR_CANDLE_BEAR,StringToColor(bears[MathRandInt(0,ArraySize(bears))]));
    ChartSetInteger(0,CHART_COLOR_CHART_DOWN,StringToColor(bears[MathRandInt(0,ArraySize(bears))]));
   } */
//---
   int y_distance=70;
   int font_size=30; 
   int width=(int)ChartGetInteger(ChartID(),CHART_WIDTH_IN_PIXELS);
   int padding=70;
   int x=width/3;
//---
    string label_name= MQLInfoString(MQL_PROGRAM_NAME);
    ObjectCreate(0, "name", OBJ_LABEL, 0, 0, 0);
    ObjectSetString(0,"name",OBJPROP_TEXT,label_name); 
    ObjectSetString(0,"name",OBJPROP_FONT,"Lucida Console"); 
    ObjectSetInteger(0,"name",OBJPROP_CORNER,CORNER_RIGHT_LOWER);
    ObjectSetInteger(0,"name",OBJPROP_XDISTANCE,x+padding); 
    ObjectSetInteger(0,"name",OBJPROP_YDISTANCE,y_distance); 
    ObjectSetInteger(0,"name",OBJPROP_FONTSIZE,font_size); 
    ObjectSetInteger(0,"name", OBJPROP_SELECTABLE, false);
 }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

上記はごく一部です。このほかに、200行を超えるコメントが付けられて不要なコードがプログラム内にあります。

MetaEditorは、未使用の変数を警告することで関数レベルで不要な変数を検出します。必要に応じて、変数を保持するしいえt警告をそのままにするか、変数を削除するかを選択できます。

ただし、残りのコードについては、これらの不要なコードがないことを確認するために、自らチェックする必要があります。

使用しない場合(必要ない場合)は削除してください。

未使用のコードは混乱を引き起こし、プログラムのコードの半ばを表示しているときに必要なコードまでスクロールする時間が長くなることは言うまでもありません。

04: 常に正しい必要はない

「間違いを犯して訂正しない者は、また別の間違いを犯す。」
—孔子

初心者がすぐにフォーラムにアクセスして自分のコードを貼りつけ、何を、なぜそのようにコーディングしていたのか、何を望んでいたのかについての説明を不明確にし、少なくする主な理由は、より多くの問題にさらされるのが怖いということです。初心者の皆さん。これは賢明ではありません。

コーディングのキャリアは終わりのない問題と挑戦に満ちており、上達するためには、さらされるチャンスのある多くの問題を解決することほど良い方法はありません。問題をフォーラムに投稿してはいけないと言っているわけではありません(誤解しないでください)。ただし、自分で少し解決するよう試してみてください。そのため、トピックを始めるときは何を試したかを説明することをお勧めします。この背後にある理由は、集中して自分でさまざまな方法に挑戦すれば、パズルが解決されるだけでなく、初めて知らなかった何かを発見して詳細を学べるかもしれないからです。

間違いが修正されたら、それを理解し、次回それを回避する方法を確認してください。


05: 一夜にして成功するという考えをあきらめる

「よく見ると、ほとんどの一夜での成功には長い時間がかかっている。」
- スティーブ・ジョブズ

しばらくの間コーディングをしているのに、何も進歩していないように感じ、先が見えない... ということですね。

初心者のほとんどはすぐに結果を得られることを期待していますが、世界はそのようには機能しません。この感覚は初心者に何度も起こることになります。

座ってリラックスして、プロセスを楽しんでください。あなたは実際に進歩を遂げています。 疑問はあなたの旅の一部に過ぎず、あなたを止めるべきではありません。好きなプロジェクトに取り組むことをお勧めします。そうすれば、学習しながら多くの楽しみを得ることができます。立ち往生することはありません。2番目のポイントで説明したように、新しいアイデアや可能性を常に受け入れてください。

努力すれば、プロセスは自動で最終製品になります。

  • コードベースではできるだけ多くのソースコードを読んでください。
  • 記事ではできるだけ多くの記事を読んでください。
  • フォーラムでは他の人を助けるためにより多くの時間を費やしてください。
  • たくさんのことを試して、自分に最適なものを見つけてください。

覚えておいてください。

成功はあなたがたまに行うことから来るものではありません。成功はあなたが一貫して行うことから来ます。

 

終わりに

正直なところ、私は素晴らしくもなく、MQL5プログラミングやWeb開発のキャリアにおいて完璧ではありません。私はまだコーディングの学生であり、教えることをやめないので、学びに終わりはありません。私は常に改善し、より良くコーディングできるように日々努力しています。私が読者と共有する勇気を持っている理由(学生でありながら教える)は、私と同じ情熱を持つ人々がより良いプログラマーになるのを助けるためです。

一緒に歩いて旅をしましょう。

MetaQuotes Ltdにより英語から翻訳されました。
元の記事: https://www.mql5.com/en/articles/9711

取引のための組合せ論と確率論(第III部): 初めての数学モデル 取引のための組合せ論と確率論(第III部): 初めての数学モデル
前に説明したトピックの論理的な続きは、取引タスクのための多機能数学モデルの開発です。本稿では、フラクタルを記述する最初の数学モデルの開発に関連するプロセス全体を最初から説明します。このモデルは重要な構成要素になるもので、多機能で普遍的である必要があります。それは、このアイデアをさらに発展させるための理論的基礎を構築します。
DoEasyライブラリのグラフィックス(第80部): 「幾何学的アニメーションフレーム」オブジェクトクラス DoEasyライブラリのグラフィックス(第80部): 「幾何学的アニメーションフレーム」オブジェクトクラス
本稿では、前の記事のクラスのコードを最適化し、指定された数の頂点を持つ正多角形を描画するための幾何学的アニメーションフレームオブジェクトクラスを作成します。
DoEasyライブラリのグラフィックス(第81部): ライブラリオブジェクトへのグラフィックの統合 DoEasyライブラリのグラフィックス(第81部): ライブラリオブジェクトへのグラフィックの統合
すでに作成されたオブジェクトを以前に作成されたライブラリオブジェクトに統合する時が来ました。最終的には各ライブラリオブジェクトに独自のグラフィカルオブジェクトが付与されるようになり、ユーザーはプログラムを操作できるようになります。
より優れたプログラマー(第01部): MQL5プログラマーとして成功するためにやめなければいけない5つのこと より優れたプログラマー(第01部): MQL5プログラマーとして成功するためにやめなければいけない5つのこと
初心者が最高のコーディングキャリアを築くのを妨げている悪い習慣はたくさんあります。これは上級プログラマーさえにも言えることです。この記事では、それらについて説明し、対処します。この記事は、MQL5で開発者として成功したいすべての人にとって必読です。