MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 282

 
Алексей Барбашин:

void OnTick() { int period = 15; int timeis = returntick(period, 1).curtime; Print("timeis= ", TimeToStr(timeis,TIME_SECONDS)); ここでポインタを破棄しようとしています }.


ここで具体的に何を破壊できるかは、よくわからない。メモリがリークするのは当然だ。ポインターとは何ですか?ポインターは、作成された動的変数が格納されているメモリアドレスへの参照である。実際には、クラス変数へのポインタを取得する手続きを呼び、この手続きの中でクラスオブジェクトを生成してメモリ上に配置し、そのポインタを目盛りを取得する関数に戻して......という流れになります。は、関数を終了するときに破棄されます。ポインターは破棄されますが、メモリはクリアされないことに注意してください!そして、新しいカチカチ音がするたびに、どんどんメモリが食べられていくのです。コード内でこの点を回避するには、まず略語を削除し、ポインタを別の変数に入れる必要があります。TickReturn* temptick =returntick(period, 1);// ポインタを取得して変数に格納 int timeis = temptick.curtime; // ポインタでオブジェクトから必要な値を取得 ...... delete temptick; // ポインタを破棄し,メモリをクリア する.

また、ポインタを破棄する前に、それが正しいかどうかを確認した方が、削除エラーを回避できます。

全体として、特にポインタやクラスについては、実際にはもっと簡単な作業であり、クラスを使用する必要もないので、悩むことはないでしょう。必要なフィールドを持つ構造体を作り、この構造体の型を持つグローバル変 数を宣言し、この構造体の情報を刻々と更新する関数を作り、それを使って必要なものを集める、この変数はグローバルになるので、関数で使う必要はなく、ポインタも不要になります。


ありがとうございます、なぜ略記に切り替えたか思い出しました、ループでは変数は更新されない(明らかに関数が呼ばれない)ので、くしゃみのたびに新しいものを作って、それを殺す必要があるのです。とにかく、リターントリックをスイッチにするのが簡単です。

 
Vitaly Muzichenko:

サーバーに口座番号のポストリクエストを送信する

サーバー側では、受信した番号をCSVファイルの全行と照合し、一致するものがあれば、ファイルのこの行から端末に応答を送信する。あとは、サーバーからのレスポンスをターミナルで読み込んで、チャートに表示するだけです。

一般に、このようなことはファイルよりも MySQL で実装する方が簡単です。


Vitalyさん、ご返信ありがとうございます。

3日前から理解しようとしているのですが、何も出てきません(私は初心者-初級者です)...。

もう少し詳しく教えてください。どんな例でも...

私の理解不足で申し訳ないのですが・・・。

 

そして、もうひとつ質問が...。

Beamは、現在値~終値~水準(23:59)(白2)まで線を引いて欲しかったのですが、終値までは(要求通り)引くのですが、水準(白2)には引かず、ボーダーチャートまで深く潜ってしまいます。

そして、任意のレベル(red1、red2など)を与えても、無限大にレイアップしたりダウンしたりします。常にHigh[0] からBeamを開始し、新しいローソク足で 新しいローソク足に移行する(つまり価格に追随する)ように書いたのが正解か、それともBeamは一度だけ描画するのか?レベルはCSVから取得しています。助けてください・・・。

if(уровни==Daily)
        {
         double red1 = d_input[0];
         double red2 = d_input[1];
         double blue1 = d_input[2];
         double blue2 = d_input[3];
         double white = d_input[4];
         double signal= d_input[5];
         double z_1 = d_input[6];
         double z_2 = d_input[7];
         double white2 = d_input[8];
                 
         t0 = дата_уровней + 1*PeriodSeconds(PERIOD_M1);
         t1 = дата_уровней + 24*PeriodSeconds(PERIOD_H1);

         Draw_Level("red1", red1, c_day_1, STYLE_SOLID, 2);  
         Draw_Level("red2", red2, c_day_1, STYLE_SOLID, 2);  
         Draw_Level("blue1", blue1, c_day_2, STYLE_SOLID, 2);  
         Draw_Level("blue2", blue2, c_day_2, STYLE_SOLID, 2);  
         Draw_Level("white", white,c_day_3, STYLE_SOLID,2);
         Draw_Level("white2", white2,c_day_3, STYLE_DOT,0);
        
         Draw_Level("green1",z_1, c_day_4, STYLE_SOLID,2);
         Draw_Level("green2",z_2,c_day_3, STYLE_DOT,2);
               
        string name = "Ray";
         int window = 0, time1 = (int)Time[0], time2 = (int)StrToTime(txt_data+" 23:59");
          double price1 = High[0], price2= white2;
         
          ObjectCreate(name, OBJ_TREND, window, time1, price1, time2, price2);
          ObjectSet(name, OBJPROP_COLOR, clrAqua);
          ObjectSet(name, OBJPROP_RAY_RIGHT, false);
          ObjectSet(name,OBJPROP_WIDTH,1);
          ObjectSet(name,OBJPROP_STYLE,2);
              
        
        if(показ_не отработанных)
            if(!check_white_level(дата_уровней,white))
               draw_line(t0,white,c_day_3);
                 else(Draw_Level("white", white,c_day_3, STYLE_SOLID,1));// меняет толщину белой при достижении ценой
                
        }
 
MosheDayan:

そして、もうひとつ質問が...。

Beamは、現在値~終値~水準(23:59)(白2)まで線を引いて欲しかったのですが、終値までは(要求通り)引くのですが、水準(白2)には引かず、ボーダーチャートまで深く潜ってしまいます。

そして、どのレベル(red1、red2など)にもタックしていますが、やはり無限大にレイアップしたりダウンしたりしています。レベルはCSVから取得します。ヘルプplz...

Alert やPrint で white2 の値を調べる(チェックする)。
 
STARIJ:
Alert または Print で white2 の値を確認します。
アラートはすぐに「EURUSD ErrorFileOpen() for write」と書き、現在の日のすべてのレベルが消える...。昨日のレベルも、過去のレベルも全部残っている...。それで...スポットでのビームはあるべきところから始まり、昨日の白2レベルまで行くが、終盤はそうではなく、今日垂直下方に昨日の白2レベルで止まっているのが目視で確認できる。
 
MosheDayan:
Alertを使って確認しようとしたら、すぐに「EURUSD Error FileOpen() for writing」と書かれて、当日のレベルが全て消えてしまいました...。昨日のレベルも、過去のレベルも全部残っている...。それで...その場のビームはあるべきところから始まり、昨日の白2のレベルまで行くが、終盤には行かず、今日は垂直下方に昨日の白2のレベルで止まっていることが目視で確認できる。

なぜファイルにアクセスする必要があるかというと、値white2を持っていて、それをAlert("white2 = ", white2)で出力してから使っているのです。

 
STARIJ:

なぜファイルを参照する必要があるかというと、white2の値を持っていて、それをAlert("white2 = ", white2)で出力してから使っているのです。

分かりやすい説明ありがとうございます...。その内容はこうです。白2 = 0.0

p.s. バカなのは私の方です・・・。White2 = 0.0は、CSVにレベルがない他の通貨ペアの場合です。しかし、CSVにはEURUSDのレベルがあり、Alertは昨日(white2 1.1720)と今日(white2 1.1810)を表示しています。

レイはあるべきところからスタートしますが、今日のwhite2の1.1810ではなく、昨日のwhite2の1.1720のレベルに行き、終値23:59まで行かず、今日は昨日のwhite2、つまり1.1720で止まっています。

 

珍紛漢紛

関数が記述されていた

int IsBelow

{

Alert("beg IsBelow")。

Alert("NextTick=",NextTick)。

//---------------------------


//---------------------------

Alert("NextTick=",NextTick)。

Alert("end IsBelow");

}

セミコロンの前にメッセージが表示されるようになりました。

質問 どのようなセミコロンが必要ですか?

説明してください ...

 
buyanov:

珍紛漢紛

関数が記述されていた

int IsBelow

{

Alert("beg IsBelow")。

Alert("NextTick=",NextTick)。

//---------------------------


//---------------------------

Alert("NextTick=",NextTick)。

Alert("end IsBelow");

}

セミコロンの前にメッセージが表示されるようになりました。

質問 どのようなセミコロンが必要ですか?

説明してください...


void IsBelow()

 
buyanov:

珍紛漢紛

関数が記述されていた

int IsBelow

{

Alert("beg IsBelow")。

Alert("NextTick=",NextTick)。

//---------------------------


//---------------------------

Alert("NextTick=",NextTick)。

Alert("end IsBelow");

}

セミコロンの前にメッセージが表示されるようになりました。

質問 どのようなセミコロンが必要ですか?

説明してください ...

その答えは、ここにある
Функции - Основы языка - Справочник MQL4
Функции - Основы языка - Справочник MQL4
  • docs.mql4.com
Функции - Основы языка - Справочник MQL4