初心者の方からの質問 MQL4 MT4 MetaTrader 4 - ページ 147

 

EA は、ファイルから日付、整数1、整数2、整数3、整数4 という形式のデータの配列を読み込む必要があります。

файл скопировал в папку C:\Users\Михаил\AppData\Roaming\MetaQuotes\Tester\1B9501BF48F2354A4685940A72752910\Agent-127.0.0.1-3000\MQL5\Files\qqq.scv

は、このフォルダーから削除されます。

これがそのコードです。


int File()
{
int P=0;

int filehandle=FileOpen("qqq.csv",FILE_READ|FILE_CSV,","); 
if(filehandle!=INVALID_HANDLE) 
     { 
     datetime d = FileReadDatetime(filehandle);
   int I=FileReadNumber(filehandle);
     FileClose(filehandle);
     Comment(d+" "+I);
     }
     else {Comment("qqq.csv");}
return P;

}

テスターでファイルを削除しないフォルダのパスを指定できますか?テスト時にこのフォルダからすべてのファイルが削除されることは理解しましたが、プログラムでファイルを作成すると、このフォルダに配置されます

 
Mikhail Simakov:

EA は、ファイルから日付、整数1、整数2、整数3、整数4 という形式のデータの配列を読み込む必要があります。

файл скопировал в папку C:\Users\Михаил\AppData\Roaming\MetaQuotes\Tester\1B9501BF48F2354A4685940A72752910\Agent-127.0.0.1-3000\MQL5\Files\qqq.scv

は、このフォルダーから削除されます。

以下はそのコードです。

テスターでファイルを削除しないフォルダのパスを指定するとか?テスト時にこのフォルダからすべてのファイルが削除されることは理解できたが、プログラムでファイルを作成すると、このフォルダに配置される

FILE_COMMON フラグでFileCopyを 使うべきかもしれませんね。新しいテストはゼロから動作するので、これは不具合かもしれません。

 
Konstantin Nikitin:

FILE_COMMON フラグを立ててFileCopyを 使うべきかもしれません。新しいテストはゼロから動作するので、これは不具合かもしれません。

ファイルをフォルダにコピーしながらテストするとうまくいきます )) さて、デリミタをどうするかですが

 

私はMQL4でトレーディングパネルを書き始めたのですが、ここでパラドックスが発生しました。すべてうまくいっているように見えますが、TFを変更するたびに、他のインジケータの線やテキストが私のパネルの上に描画されます。

以下、確認した内容です。TFを変更する際、パラメータOBJPROP_BACK = falseとします。こちら側は何も問題ないということです。

このテーマについて、何かアイデアはありますか?

追伸:実は今確認したところ、(プロトタイプとして持っていった)ソースコードも同じような挙動をしていました。TFを変更した後、パネルとOOPを使わないインジケータが作る線の上に普通の線が描かれるようになりました。
https://www.mql5.com/ru/code/19220
Infopanel
Infopanel
  • www.mql5.com
Пример создания простого и быстрого меню с поддержкой нескольких языков. В примере выводится информация о цене, времени до следующего бара, балансе счета, количестве ордеров. Данный пример можно использовать в качестве шаблона для создания своих разработок. Минус данного метода при добавлении, удалении или редактировании объектов необходимо...
 
Goya7:

私はMQL4でトレーディングパネルを書き始めたのですが、ここでパラドックスが発生しました。全て問題なく見えますが、TFを変更するたびに、他の指標のラインとテキストが私のパネルの上に描画されます。

以下は確認した内容です。TFを変更した場合、パラメータOBJPROP_BACK = falseとなります。だから、こっちは何も問題ないんです。

このテーマについて、何かアイデアはありますか?

追伸:実は今確認したところ、(プロトタイプとして持っていった)ソースコードも同じような挙動をしています。TFを変更した後、パネルとOOPを使わないインジケータが作る線の上に普通の線が描かれるようになりました。
https://www.mql5.com/ru/code/19220

タイムフレームを切り替えると、他のプログラムで作成されたオブジェクトは削除され、新しいオブジェクトがすぐに作成されます。パネルでは、オブジェクトは削除されないので、"古い "状態です。チャート上では、「最後にいる者が上になる」という原則が適用される。

DeInit()でパネル内のオブジェクトを削除し、再度新規に作成する必要がある

 
Goya7:

私はMQL4でトレーディングパネルを書き始めたのですが、ここでパラドックスが発生しました。全て問題なく見えますが、TFを変更するたびに、他の指標のラインとテキストが私のパネルの上に描画されます。

以下、確認した内容です。TFを変更した場合、パラメータOBJPROP_BACK = falseとなります。だから、こっちは何も問題ないんです。

このテーマについて、何かアイデアはありますか?

追伸:実は今確認したところ、(プロトタイプとして持っていった)ソースコードも同じような挙動をしています。TFを変更した後、パネルとOOPを使わないインジケータが作る線の上に普通の線が描かれるようになりました。
https://www.mql5.com/ru/code/19220
ヴィタリー・ムジチェンコ

タイムフレームを切り替えると、他のプログラムで作成されたオブジェクトは削除され、新しいオブジェクトがすぐに作成されます。パネルでは、オブジェクトは削除されないので、"古い "状態です。チャート上では、「最後にいる者が上になる」という原則が適用される。

DeInit()を使ってパネル内のオブジェクトを削除し、再度新しいオブジェクトを作成する必要があります。

新しいオブジェクトの生成をEventでキャッチし、パネルを再描画するのがよいでしょう。

 
Vitaly Muzichenko:

時間帯を切り替えると、他の番組で作成したオブジェクトは削除され、新しいオブジェクトがすぐに作成されます。パネルでは、オブジェクトは削除されないので、"古い "状態です。グラフでは「最後にいる者が上になる」という原則が適用される。

DeInit()を使ってパネル内のオブジェクトを削除し、再度新しいオブジェクトを作成する必要があります。

感想をありがとうございました。DeInit()では当然ながら削除される。TFを変更するとInit()プロシージャは通りますが、何かパネルが再描画されないような気がします。すなわち、実験的に、私のパネルがあるところに縄張りを持つ別のパネルを設置し、それを削除したのです。私のもなくなりました(TF変更前)←だから再描画してないんだよ。((
再描画の方法をもう少し詳しく教えてください。


タラス・スロボジャニク

新しいオブジェクトの生成をEventでキャッチし、パネルを再描画するのがよいでしょう。

プログラマーとして30分しかない私に、その方法を教えてください。:)
 
int OnInit()
{
ChartSetInteger(0,CHART_EVENT_OBJECT_CREATE,true);
}


void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
//событие создания нового объекта на чарте
if(id==CHARTEVENT_OBJECT_CREATE && StringFind(sparam, prefix, 0)<0)
   {
   //удаляем панель и рисуем заново

   ChartRedraw();
   }
}

ps. それで思い出したのですが、作成されたオブジェクトの 名前が「あなたの」オブジェクトでないことを確認する必要もあります(あなたのオブジェクトの名前のプレフィックスを付けること)。
または名前の代わりに、オブジェクトのタイプを比較します。

 
市民よ、私のやり方が正しいかどうか教えてくれ!!!Expert Advisorで30や70のゾーンに入ってない時に取引して、入った時は取引しないようにして欲しい!!!!このやり方で良いのでしょうか?

RSI3 = iRSI(_Symbol, _Period, RSIPeriod, PRICE_CLOSE, 1);
RSI4 = iRSI(_Symbol, _Period, RSIPeriod, PRICE_CLOSE, 2);

bool RSItf = RSI3 > 30 && 30 > RSI4.RSI3= iRSI(_Symbol) &&PRSI_CLOSE.RSI4(_Symbol);bool RSIf = RSI(_Symbol, _Period, RTK, RTK, RTK)
if(RSItf == true)
{
}
else
{
ordersend(_Symbol, OP_SELL, lot, Bid, Slippage, 0, 0, NULL, Magic, 0, clrRed);
}
bool RSItf = RSI3 >>.70 && 70> RSI4;
if(RSItf == true)
{
}
else
{
ordersend(_Symbol, OP_BUY, lot, Ask, Slippage, 0, 0, NULL, Magic, 0, clrBlue);
}
 
ponochka:
市民よ、私のやり方が正しいかどうか教えてくれ!!!Expert Advisorで30や70のゾーンに入ってない時に取引して、入った時は取引しないようにして欲しい!!!!このやり方で良いのでしょうか?

私が理解している限りでは、このようなものが必要です。

int RSIPeriod = 0, Slippage = 5, Magic = 1234;
double lot = 0.1;

void OnStart()
{
     double RSI3 = iRSI(_Symbol, _Period, RSIPeriod, PRICE_CLOSE, 1),
            RSI4 = iRSI(_Symbol, _Period, RSIPeriod, PRICE_CLOSE, 2);
     int ticket = 0;
     
     if(RSI3 <= 30 && RSI4 <= 30)
          ticket = OrderSend(_Symbol, OP_SELL, lot, Bid, Slippage, 0, 0, NULL, Magic, 0, clrRed);
     
     if(RSI3 >= 70 && RSI4 >= 70)
          ticket = OrderSend(_Symbol, OP_BUY, lot, Ask, Slippage, 0, 0, NULL, Magic, 0, clrBlue);
}