[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 776

 
vasya_vasya:
シンボルコードを選択するerrowオブジェクトを作成するか、ラベルオブジェクトを使用します。

ありがとうございます)え、ドット絵がないだけで残念です(
 
FoxUA:
作業者ではありませんが、今週のExpert Advisorを書こうとしているところです。仕事でEAを書こうとしているのですが、たった1週間前に名前と用途以上のことを覚えました。何のためにあるのかわからないけど、何のためにあるのかわからないまま分解するのは大変だと思い、新しいものを作ってみることにしました。もちろん全部は見れません。やりたかったこと、REMOTE ORDERをREMOTEの値段でOFFにすることだけをして、あとは何も考えずです。が、お忙しい中、ありがとうございました。

悪気はないんです。あなたのコードは、初心者には複雑です。単純なものから複雑なものへと変化していくのです。学習には体系的なアプローチが必要で、そうでなければ意味がない。
 
このバーの開始時刻がわかっている場合、mql4を使って、現在のチャート 期間にないこのバーのバー番号や価格パラメータを見つけることは可能でしょうか?
 
drknn:

気を悪くしないでください。あなたのコードは、初心者には複雑です。単純なものから複雑なものへと変化していくのです。体系的に学ばなければ意味がない。

私はそこに同意しない、あなたは心に目標を持つべきであり、残りは従うだろうが、あなたは助けを必要としています。 複雑さに関しては、サンプルの取引ロボットの何がそんなに複雑でシンプルではありません? 私は複雑な計算で大きなEAを作っているのではなく、市場1を開き、保留、変更、削除して、他の1に影響を与える操作と方法を学ぶためのボード全体の簡単なものです!私は、このEAを使用しています。
 
FoxUA:

私はそこに同意しない、あなたは目的を持っている必要があります、他のすべては後に続くだろう、しかし、もちろん、あなたは助けなしに行うことはできません。 複雑さに関しては、あなたはシンプルで簡単に構築することができると思います? 私は複雑な計算や指標で大きなEAを作るのではなく、市場1を開き、そしてボード全体を変更したり削除して、他の1に影響を与える動作原理と方法を学習するシンプルなものです!私は、このEAを作るために、私はそれを行うことができます。


コード構築のロジックと変数命名のロジックを変更する。これがまず第一にやるべきことです。変数名が5文字より長くても大丈夫です。コードを明確にするための戦いにおいて、名前の明確さ、スペースによるブロックの区切り、段落記号、コメントはくそ重要である。MQLに限らず)言語を学べば学ぶほど、コードは複雑になっていきます。読みやすい変数名をつける習慣や、ブロック(説明付き)でコードをまとめる習慣をつけないと、遅かれ早かれ、論理的な間違いを見つけるのに苦労するようなコードを作ってしまい、「こんなに読めないコードにしてしまった」と自分を呪うことになります。

示したコードが初心者のあなたにとって複雑に見えないのであれば、それはあなたにとってプラスでしかないのです。

 
FoxUA:
というわけで、あなたのご意見をお聞かせください。

ここでは、ブロック単位で構成され、変数名からなぜその変数が適用されるのかがわからないコードの例を紹介します。

 
RekkeR:
皆さんこんばんは、今週もよろしくお願いします。熱に弱いんでしょうね、実は問題は線間の距離をpipsで決める方法なんです?

Speed1=(Price12-Price11)/(Bar11-Bar12); Speed2=(Price22-Price21)/(Bar21-Bar22);

Price1=Price11+Speed1*Bar11; Price2=Price21+Speed2*Bar21;

距離=(価格1-価格2)/点。

これは、現在時刻における2本の線の距離を求める場合である。

 
drknn:

ここでは、ブロック単位で構成され、変数名からなぜこの変数が適用されるのかがわからないようなコードの例を紹介します。

私は時々あなたがそこに書きたいと思ったものを覚えていない必要があるという事実に同意しますが、それはより多くの作業方法ですが、研究ではなく、それは芸術家の手の中にブラシを言うように、私はすでに風景とそれが明確に形作られているために、単純な小さな絵を書くための色や技術の選択に興味があります。私は疑問に思っていたので、それは他の言葉とあなたが根の例で書いたものだけで、インターネットや教科書に同じですべてのための技術を記述する興味深い本を手にすることが可能である、それはロボット工学の技術ですので、私は例や写真なら読んで幸せになる!................................私は、それが可能であることを確認してください。

 
tara:

Speed1=(Price12-Price11)/(Bar11-Bar12); Speed2=(Price22-Price21)/(Bar21-Bar22);

Price1=Price11+Speed1*Bar11; Price2=Price21+Speed2*Bar21;

距離=(価格1-価格2)/点。

これは、現在時刻における2本の線の距離を求める場合である。

横線が いくつかあるので、その間のクォータをいろいろな組み合わせで決める必要があるのですが、原則として、この段階では2本の線の間の決定で十分満足しているので、残りは手動でやることにします。もしかしたら、既成のスクリプトやそのようなインジケータがあるのでは?ご感想をお寄せいただきありがとうございました。
 
FoxUA:

...

というようなことを、例や写真付きで読んでみたいです

じゃあ、実験してみようか!2つのスクリプトを書いてみましょう。1つは、機能の正しい説明が含まれます。もう一方には、間違ったものが入ってしまいます。だから、これは正しいスクリプトなんだ。

#property show_inputs //эта строка выводит окно пользовательских параметров на экран
extern double DlyaKornya=300; // величина. из которой нужно извлечь кв. корень
//+------------------------------------------------------------------+
//|                 Старт работы правильного скрипта                 |
//|                 вычисляющего квадратный корень                   |
//+------------------------------------------------------------------+
int start(){
  double Koren=0;
        Alert("--------------------------------------------");
  if(DlyaKornya<0){
    Alert("Ошибка! Переменная ",DlyaKornya," не может быть меньше нуля");
    return(0);
  }
  Koren=MyKoren(DlyaKornya);
  Alert("Наша подпрограмма выдала результат = ",Koren);
        Alert("На вход функции MyKoren() было подано число = ",DlyaKornya);
  Alert("---- Правильное применение функции ----");
        return(0);
}
//+------------------------------------------------------------------+
//|                  Пользовательские подпрограммы                   |
//+------------------------------------------------------------------+

// ------------ MyKoren() -------------------------------------
// функция возвращает квадратный корень числа
// ------------------------------------------
double MyKoren(double MyValue){
        double Rezult=0;
        Alert("Внутри функции переменная MyValue имеет значение = ",MyValue);
        Rezult=MathSqrt(MyValue);
        return(Rezult);
}

そして、これは間違った脚本です。

#property show_inputs //эта строка выводит окно пользовательских параметров на экран
extern double DlyaKornya=300; // величина. из которой нужно извлечь кв. корень
//+------------------------------------------------------------------+
//|                 Старт работы неправильного скрипта               |
//|                 вычисляющего квадратный корень                   |
//+------------------------------------------------------------------+
int start(){
  double Koren=0;
        Alert("--------------------------------------------");
  if(DlyaKornya<0){
    Alert("Ошибка! Переменная ",DlyaKornya," не может быть меньше нуля");
    return(0);
  }
  Koren=MyKoren(DlyaKornya);
  Alert("Наша подпрограмма выдала результат = ",Koren);
        Alert("На вход функции MyKoren() было подано число = ",DlyaKornya);
  Alert("----НЕправильное применение функции ----");
        return(0);
}
//+------------------------------------------------------------------+
//|                  Пользовательские подпрограммы                   |
//+------------------------------------------------------------------+

// ------------ MyKoren() -------------------------------------
// функция возвращает квадратный корень числа
// ------------------------------------------
double MyKoren(double MyValue=36){
        double Rezult=0;
        Alert("Внутри функции переменная MyValue имеет значение = ",MyValue);
        Rezult=MathSqrt(MyValue);
        return(Rezult);
}

double MyKoren(double MyValue=36){という行は、変数MyValueを値=36で 初期化するので、不正解です。サブルーチンにDlyaKornya変数に値=を渡しているので 、意味がないのです。

ここで、両方のスクリプトを順次チャートに投げてみます。以下はその様子です。

しかし、どちらのスクリプトも同じ結果になった。

2番目の(誤った)スクリプトは、value = 6を生成するはずでした。double MyKoren(double MyValue=36){の行は意味がないので、コンパイラはフールプルーフ機能を内蔵している可能性が高いです。その中の変数を 値=36で初期化する のは、おそらくパラメータを指定せずに関数を呼び出した場合にのみ機能します。この場合、サブルーチンを呼び出す際に、まず変数double MyValueが宣言され、次にvalue = 36が代入され、その後初めて変数DlyaKornyaに格納されている値が代入されたのだと思われます。それ以外の説明は考えられません。

とにかく、double MyKoren(double MyValue=36){ のような構文は使わず、double MyKoren(double MyValue){ のように書いた方が良い。そうしないと、なぜサブプログラムが思うように動かないのかと思うことになる。