MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 818 1...811812813814815816817818819820821822823824825...1953 新しいコメント yiduwi 2019.04.23 08:16 #8171 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) だけだと、全く設定されない) Maxim Kuznetsov 2019.04.23 08:50 #8172 yiduwi:OK)1つの矢印ですが、M15以上のこの条件では、矢印は21:00に設定されています。 また、Period()* を使わずに+PeriodSeconds(PERIOD_M1) だけだと、全く設定されない)ドキュメントを読む :-)Period() は、現在の期間の ID を返すだけです。なぜそれを掛けるのですか? PERIOD_M1 (例としてあげています) の代わりに、PeriodSeconds( Period() ) に渡します。- で、現在の期間の1バーの中の何秒かを取得します。 Igor Zakharov 2019.04.23 10:03 #8173 kopeyka2: バミューダの平行六面体」という難問はここまでだ私には効果的です :)端末のオープン/クローズも試した。 追記:Artyomさん、5に関する質問を4の話題に移しましたね...。偶然に見つけた。 Maxim Kuznetsov 2019.04.23 10:08 #8174 kopeyka2: EMAライン20 2019.04.23 00:00 オンライン接続がない状態でMT5を起動すると、すぐに「array out...」と表示される。 エラーは様々ですが、常に存在します。オンラインでも再現可能だが、MTのスイッチが入っている時の方が多い。 そんな "バミューダパラレップス "の謎に迫ります。エラーメッセージには、エラーが発生した行番号が表示されます。そこから掘り下げを開始 Artyom Trishkin 2019.04.23 10:10 #8175 Igor Zakharov:私には効果的です :)端末のオープン/クローズも試した。 追記:Artyomさん、5に関する質問を4の話題に移しましたね...。偶然に見つけた。これは共通のテーマで、ここではMQL4だけでなく、MQL5への移行もお手伝いしています。だから、テーマの中に入っているんです。 WinProject 2019.04.23 15:02 #8176 テキストファイル.csvから取引価格を取得するEAコードの書き方を教えてください。なぜこのような質問が生じるのか:各ティックでEAは現在の価格と.csvファイルの価格を比較しますが、私が正しく理解しているなら、それはfileopen関数の ループによって完全に読み込まれます。しかし、このファイルには昨年の5000行以上が含まれており、各行には商品名、価格、取引の種類(買い/売り)、記録日、注文取り消し日が記載されています。テスト時には、Expert Advisorはすべてのファイル行を1ティックごとにループして、注文を出すタイミングかどうかを理解します。それとも、テスト用に、EAに初期化時に全ての注文に一括して取消日を設定させ、実際の取引では1ティックごとに有効期限で注文をチェックすればいいのでしょうか?もしかしたら、これは私が期待していたものとは全く違うかもしれません。 リソース的に正しくないか、他のバリエーション(例えば、グラフィカルなオブジェクトを作って、現在の価格と比較すればいいのですが、そこにもループがあります)があるかもしれませんので、アドバイスお願いします。 Vladimir Starikov 2019.04.23 17:09 #8177 こんにちは。 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)です。}//+------------------------------------------------------------------+//+------------------------------------------------------------------+ Any questions from newcomers 初心者の方からの質問 MQL4 MT4 MetaTrader Questions from Beginners MQL4 Roni Iron 2019.04.23 17:32 #8178 セリック29 ありがとうございます、荷物に情報を追加します。 Igor Makanu 2019.04.23 17:58 #8179 WinProject:.csvファイルから取引価格を取得するEAコードの書き方を教えてください。この質問が発生した理由: 私が正しく理解していれば、EAは毎ティックごとに現在の価格と.csvファイル内の価格を比較します。しかし、このファイルには昨年の5000行以上が含まれており、各行には商品名、価格、取引の種類(買い/売り)、記録日、注文取り消し日が記載されています。テスト時には、Expert Advisorはすべてのファイル行を1ティックごとにループして、注文を出すタイミングかどうかを理解します。それとも、テスト用に、EAに初期化時にすべての注文に一括して取消日を設定させ、実際の取引では1ティックごとに有効期限で実際の注文をチェックすればいいのでしょうか?もしかしたら、全然予想と違うかもしれません。 リソースの観点からこれが正しいのか、他のバリエーションがあるのか(例えば、グラフィックオブジェクトを作って、それと現在の価格を比較すればいいのですが、同じサイクルのようです)、よく分かりませんので、アドバイスお願いします。通常、ファイルへの読み込み(書き込み)回数はできるだけ少なくしようとします。 このタスクでは、ロード時にデータを配列に読み込んで(構造体の方が便利かもしれませんが)、現在の価格と時間の値を配列の値と比較するのがよいでしょう。 SZY:コードベース "ファイル "または "csv "で検索すると、一度そのような既製のエキスパート-アドバイザーズだった - データにファイルの貿易から読み取る。 WinProject 2019.04.23 18:08 #8180 Igor Makanu:通常、ファイルへの読み込み(書き込み)回数はできるだけ少なくしようとします。 このタスクでは、ロード時にデータを配列に読み込んで(構造体の方が便利かもしれませんが)、現在の価格と時間の値を配列の値と比較するのがよいでしょう。 ZS: コードベース「ファイル」または「csv」で検索すると、かつてそのような既製のEAがあった - そのデータでファイルトレードから読み取る。ありがとうございます。 1...811812813814815816817818819820821822823824825...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
if (time[i]>=time_m1 && time[i]<time_m1+PeriodSeconds(PERIOD_M1) {
// время time[i] попало внутрь бара открытого в time_m1
}
OK)1つの矢印ですが、M15以上のこの条件では、矢印は21:00に設定されています。
で、Period()* を使わずに +PeriodSeconds(PERIOD_M1) だけだと、全く設定されない)
OK)1つの矢印ですが、M15以上のこの条件では、矢印は21:00に設定されています。
また、Period()* を使わずに+PeriodSeconds(PERIOD_M1) だけだと、全く設定されない)
ドキュメントを読む :-)Period() は、現在の期間の ID を返すだけです。なぜそれを掛けるのですか?
PERIOD_M1 (例としてあげています) の代わりに、PeriodSeconds( Period() ) に渡します。- で、現在の期間の1バーの中の何秒かを取得します。
バミューダの平行六面体」という難問はここまでだ
私には効果的です :)端末のオープン/クローズも試した。
追記:Artyomさん、5に関する質問を4の話題に移しましたね...。偶然に見つけた。
EMAライン20 2019.04.23 00:00
オンライン接続がない状態でMT5を起動すると、すぐに「array out...」と表示される。
エラーは様々ですが、常に存在します。オンラインでも再現可能だが、MTのスイッチが入っている時の方が多い。
そんな "バミューダパラレップス "の謎に迫ります。
私には効果的です :)端末のオープン/クローズも試した。
追記:Artyomさん、5に関する質問を4の話題に移しましたね...。偶然に見つけた。
これは共通のテーマで、ここではMQL4だけでなく、MQL5への移行もお手伝いしています。だから、テーマの中に入っているんです。
こんにちは。
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
ありがとうございます、荷物に情報を追加します。
.csvファイルから取引価格を取得するEAコードの書き方を教えてください。この質問が発生した理由: 私が正しく理解していれば、EAは毎ティックごとに現在の価格と.csvファイル内の価格を比較します。しかし、このファイルには昨年の5000行以上が含まれており、各行には商品名、価格、取引の種類(買い/売り)、記録日、注文取り消し日が記載されています。テスト時には、Expert Advisorはすべてのファイル行を1ティックごとにループして、注文を出すタイミングかどうかを理解します。それとも、テスト用に、EAに初期化時にすべての注文に一括して取消日を設定させ、実際の取引では1ティックごとに有効期限で実際の注文をチェックすればいいのでしょうか?もしかしたら、全然予想と違うかもしれません。 リソースの観点からこれが正しいのか、他のバリエーションがあるのか(例えば、グラフィックオブジェクトを作って、それと現在の価格を比較すればいいのですが、同じサイクルのようです)、よく分かりませんので、アドバイスお願いします。
通常、ファイルへの読み込み(書き込み)回数はできるだけ少なくしようとします。
このタスクでは、ロード時にデータを配列に読み込んで(構造体の方が便利かもしれませんが)、現在の価格と時間の値を配列の値と比較するのがよいでしょう。
SZY:コードベース "ファイル "または "csv "で検索すると、一度そのような既製のエキスパート-アドバイザーズだった - データにファイルの貿易から読み取る。
通常、ファイルへの読み込み(書き込み)回数はできるだけ少なくしようとします。
このタスクでは、ロード時にデータを配列に読み込んで(構造体の方が便利かもしれませんが)、現在の価格と時間の値を配列の値と比較するのがよいでしょう。
ZS: コードベース「ファイル」または「csv」で検索すると、かつてそのような既製のEAがあった - そのデータでファイルトレードから読み取る。
ありがとうございます。