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

 
Maxim Kuznetsov:

if (time[i]>=time_m1 && time[i]<time_m1+PeriodSeconds(PERIOD_M1) {

  // время time[i] попало внутрь бара открытого в time_m1

}

OK)1つの矢印ですが、M15以上のこの条件では、矢印は21:00に設定されています。

 if(time[i]>=StringToTime("2019.04.22 20:55:00") && time[i]<StringToTime("2019.04.22 20:55:00")+Period()*PeriodSeconds(PERIOD_M1))

で、Period()*使わずに +PeriodSeconds(PERIOD_M1) だけだと、全く設定されない)

 
yiduwi:

OK)1つの矢印ですが、M15以上のこの条件では、矢印は21:00に設定されています。

また、Period()* を使わずに+PeriodSeconds(PERIOD_M1) だけだと、全く設定されない)

ドキュメントを読む :-)Period() は、現在の期間の ID を返すだけです。なぜそれを掛けるのですか?

PERIOD_M1 (例としてあげています) の代わりに、PeriodSeconds( Period() ) に渡します。- で、現在の期間の1バーの中の何秒かを取得します。

 
kopeyka2:

バミューダの平行六面体」という難問はここまでだ

私には効果的です :)端末のオープン/クローズも試した。

追記:Artyomさん、5に関する質問を4の話題に移しましたね...。偶然に見つけた。

 
kopeyka2:


EMAライン20 2019.04.23 00:00

オンライン接続がない状態でMT5を起動すると、すぐに「array out...」と表示される。

エラーは様々ですが、常に存在します。オンラインでも再現可能だが、MTのスイッチが入っている時の方が多い。


そんな "バミューダパラレップス "の謎に迫ります。

エラーメッセージには、エラーが発生した行番号が表示されます。そこから掘り下げを開始
 
Igor Zakharov:

私には効果的です :)端末のオープン/クローズも試した。

追記:Artyomさん、5に関する質問を4の話題に移しましたね...。偶然に見つけた。

これは共通のテーマで、ここではMQL4だけでなく、MQL5への移行もお手伝いしています。だから、テーマの中に入っているんです。

 
テキストファイル.csvから取引価格を取得するEAコードの書き方を教えてください。なぜこのような質問が生じるのか:各ティックでEAは現在の価格と.csvファイルの価格を比較しますが、私が正しく理解しているなら、それはfileopen関数の ループによって完全に読み込まれます。しかし、このファイルには昨年の5000行以上が含まれており、各行には商品名、価格、取引の種類(買い/売り)、記録日、注文取り消し日が記載されています。テスト時には、Expert Advisorはすべてのファイル行を1ティックごとにループして、注文を出すタイミングかどうかを理解します。それとも、テスト用に、EAに初期化時に全ての注文に一括して取消日を設定させ、実際の取引では1ティックごとに有効期限で注文をチェックすればいいのでしょうか?もしかしたら、これは私が期待していたものとは全く違うかもしれません。 リソース的に正しくないか、他のバリエーション(例えば、グラフィカルなオブジェクトを作って、現在の価格と比較すればいいのですが、そこにもループがあります)があるかもしれませんので、アドバイスお願いします。
 

こんにちは。


MQL4プログラミングのビデオチュートリアルをダウンロードしました。

レッスンに従ってExpert Advisorを作成しました。

でも、取引しているときはうまくいかないんです。

コンパイル時にエラーは出ないのですが。

まだ始めたばかりなので、ここまでの誤差を見つけるのは大変です。

どなたかお力を貸して頂けないでしょうか。

ありがとうございました。

コード

/+----Входные параметры----------------+

extern inttern BarCount=10;

extern int int HourStart=14;

extern double Lots=0.1;

extern int StopLoss=120;

extern int TakeProfit=300;

extern int Magic=1456;

//+------------Глобальные переменные----------------+

double minprice=999999,mp,

maxprice=-99999,SL,TP;

int ticketです。

//+------------------------------------------------------------------+

//| 専門家による初期化機能

//+------------------------------------------------------------------+

int OnInit()

{

return(INIT_SUCCEEDED);

}

//+------------------------------------------------------------------+

//| 専門家による初期化関数

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

{


}

//+------------------------------------------------------------------+

//| エキスパートティック機能

//+------------------------------------------------------------------+

void OnTick()

{

GetMinPrice()。

GetMaxPrice()。


if(TimeHour(TimeCurrent())==HourStart)とする。

{

if(BuyLimitCount()&& BuyCount() ==0)

{

SL=NormalizeDouble(minprice-StopLoss*Point,5)となります。

TP=NormalizeDouble(minprice+TakeProfit*Point,5)です。

ticket=OrderSend(Symbol(),OP_BUYLIMIT,Lots,minprice,5,SL,TP,"", Magic,0,blue)。

if(チケット<0)

Print("Failed to open buy limit");

}

if(SellLimitCount()&&SellCount()==0)の場合。

{

SL=NormalizeDouble(maxprice+StopLoss*Point,5)となります。

TP=NormalizeDouble(maxprice-TakeProfit*Point,5)です。

ticket=OrderSend(Symbol(),OP_SELLLIMIT,Lots,maxprice,5,SL,TP,"", Magic,0,Red);

if(チケット<0)

Print("Failure to open Sell Limit");

}

}



Comment("MinPrice: "+DoubleToStr(minprice,5)+" \n "+"MaxPrice: "+DoubleToStr(maxprice,5)");


}

//バーカウント・バー番号で最低価格を決定する関数

void GetMinPrice()

{

for(int i=0; i<BarCount; i++)

{

mp=iLow(Symbol(),PERIOD_CURRENT,i)とする。

if(mp<minprice)

minprice=mp;

}

を返します。

}

//バーカウント数で最高値を決定する関数

void GetMaxPrice()

{

for(int i=0; i<BarCount; i++)

{

mp=iHigh(Symbol(),PERIOD_CURRENT,i)とする。

if(mp>maxprice)

maxprice=mp;

}

を返します。

}

//+買い指値注文数関数

int BuyLimitCount()

{

int count=0;

for(int i=OrdersTotal()-1; i>=0; i--)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderType()==OP_BUYLIMIT)

{

count++です。

}

}

return(count)です。

}

//+売り指値注文数の関数

int SellLimitCount()

{

int count=0;

for(int i=OrdersTotal()-1; i>=0; i--)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderType()==OP_SELLLIMIT)

{

count++です。

}

}

return(count)です。

}

//+成行注文 数の関数

int BuyCount()

{

int count=0;

for(int i=OrdersTotal()-1; i>=0; i--)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderType()==OP_BUY)

{

count++です。

}

}

return(count)です。

}

//+functionは、市場での売り注文の数です。

int SellCount()

{

int count=0;

for(int i=OrdersTotal()-1; i>=0; i--)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderType()==OP_SELL)

{

count++です。

}

}

return(count)です。

}

//+------------------------------------------------------------------+


//+------------------------------------------------------------------+

 

セリック29

ありがとうございます、荷物に情報を追加します。

 
WinProject:
.csvファイルから取引価格を取得するEAコードの書き方を教えてください。この質問が発生した理由: 私が正しく理解していれば、EAは毎ティックごとに現在の価格と.csvファイル内の価格を比較します。しかし、このファイルには昨年の5000行以上が含まれており、各行には商品名、価格、取引の種類(買い/売り)、記録日、注文取り消し日が記載されています。テスト時には、Expert Advisorはすべてのファイル行を1ティックごとにループして、注文を出すタイミングかどうかを理解します。それとも、テスト用に、EAに初期化時にすべての注文に一括して取消日を設定させ、実際の取引では1ティックごとに有効期限で実際の注文をチェックすればいいのでしょうか?もしかしたら、全然予想と違うかもしれません。 リソースの観点からこれが正しいのか、他のバリエーションがあるのか(例えば、グラフィックオブジェクトを作って、それと現在の価格を比較すればいいのですが、同じサイクルのようです)、よく分かりませんので、アドバイスお願いします。

通常、ファイルへの読み込み(書き込み)回数はできるだけ少なくしようとします。

このタスクでは、ロード時にデータを配列に読み込んで(構造体の方が便利かもしれませんが)、現在の価格と時間の値を配列の値と比較するのがよいでしょう。

SZY:コードベース "ファイル "または "csv "で検索すると、一度そのような既製のエキスパート-アドバイザーズだった - データにファイルの貿易から読み取る。

 
Igor Makanu:

通常、ファイルへの読み込み(書き込み)回数はできるだけ少なくしようとします。

このタスクでは、ロード時にデータを配列に読み込んで(構造体の方が便利かもしれませんが)、現在の価格と時間の値を配列の値と比較するのがよいでしょう。

ZS: コードベース「ファイル」または「csv」で検索すると、かつてそのような既製のEAがあった - そのデータでファイルトレードから読み取る。

ありがとうございます。