初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 418 1...411412413414415416417418419420421422423424425...1503 新しいコメント Aleksey Vyazmikin 2015.08.26 11:16 #4171 こんにちは、このエラーが発生しました -ストラテジーテスターの ログから。2015.08.26 14:09:47.704 2001.08.29 16:15 'Kamikadze_MA_V_04_42_Fibo_03.mq4' (929,29) で範囲外の配列。(929,29) - これは文字列で、文字列の中の文字のシーケンス番号ですか? Vladimir Karputov 2015.08.26 11:18 #4172 -Aleks-:こんにちは、このエラーが発生しました -ストラテジーテスターの ログから。2015.08.26 14:09:47.704 2001.08.29 16:15 'Kamikadze_MA_V_04_42_Fibo_03.mq4' (929,29) で範囲外の配列。(929,29) - これは文字列で、文字列の中の文字のシーケンス番号ですか? はい。 Leanid Aladzyeu 2015.08.26 11:21 #4173 -Aleks-:こんにちは、このエラーが発生しました -ストラテジーテスターの ログから。2015.08.26 14:09:47.704 2001.08.29 16:15 'Kamikadze_MA_V_04_42_Fibo_03.mq4' (929,29) で範囲外の配列。(929,29) - これは文字列で、文字列の中の文字のシーケンス番号ですか? 多くの場合、コンパイラは直接エラーを指さないが、どこか近くにある) Aleksey Vyazmikin 2015.08.26 11:27 #4174 Karputov Vladimir: はい。2年うまくいって、バンバンエラーになる......その時の注文が多いのだと思います。以下はそのコードですが、何が問題なのか(太字で強調表示)、アドバイスをお願いします。 if(!CloseOk) { if(OrderType()==OP_BUY) { //Print("BUY=",OrderTicket()); nBuy++; if(lastTimeBuy<1 || lastTimeBuy<OrderOpenTime())lastTimeBuy=OrderOpenTime(); //if (TP_Error<stplvl/Point)TP_Error=stplvl/Point; //if (OrderOpenPrice()+stplvl>MAT)NewTP=Ask+TP_Error*Point;else NewTP=MAT; //if (TP_Error==0)NewTP=MAT; NewTP=NormalizeDouble(MAT,Digits); if(MathAbs(NewTP-OrderTakeProfit())>1*Point) {//модифицируем ТП if(swCommentary) Print("Модификация Тейк-Профита BUY "+DoubleToStr(NewTP,Digits)+" OPEN="+OrderOpenPrice()); ModifyStopTake(0,stpls,NewTP);takepr=NewTP; } if(BU!=0 && OrderStopLoss()!=(OrderOpenPrice()+BU*Point) && //безубыток Bid>BUbuy && Ask>(OrderOpenPrice()+BU*Point+stplvl) && (Levl_Zerro==0 || (maMirrorOBuy<(OrderOpenPrice()-Levl_Zerro*Point)))) { if(swCommentary)Print("Безубыток BUY "+DoubleToStr(OrderOpenPrice()+BU*Point,Digits)); if(maMBlock!=1){Print("BUY 2");ModifyStopTake(0,OrderOpenPrice()+BU*Point,takepr);stpls=OrderOpenPrice()+BU*Point;} OrderBU[NorderBU]=OrderTicket();NorderBU++; }//maMBlock!=1&& if(BarSL!=0 && iBarShift(NULL,0,OrderOpenTime())>=BarSL) { if(swCommentary)Print("BARSL BUY");ClosePosBySelect(); if(blockBarSL>0) { YesBarSLBuy=0;if(swCommentary)Print("blockBARSL BUY"); //ClosePositions("NULL",OP_BUY,Magic); ClosePosBySelect(); } }//BARSL } if(OrderType()==OP_SELL) { //Print("SELL=",OrderTicket()); nSell++; if(lastTimeSell<1 || lastTimeSell<OrderOpenTime())lastTimeSell=OrderOpenTime(); //if (TP_Error<stplvl/Point)TP_Error=stplvl/Point; //if (OrderOpenPrice()-stplvl<MAT)NewTP=Bid-TP_Error*Point;else NewTP=MAT; //if (TP_Error==0)NewTP=MAT; NewTP=NormalizeDouble(MAT,Digits); if(MathAbs(NewTP-OrderTakeProfit())>1*Point) {//модифицируем ТП if(swCommentary) Print("Модификация Тейк-Профита SELL "+DoubleToStr(NewTP,Digits)+" OPEN="+OrderOpenPrice()+ " STOP="+OrderStopLoss()); ModifyStopTake(0,stpls,NewTP);takepr=NewTP; } if(BU!=0 && OrderStopLoss()!=(OrderOpenPrice()-BU*Point) && Bid<BUsell && //безубыток Bid<(OrderOpenPrice()-BU*Point-stplvl) && (Levl_Zerro==0 || ((OrderOpenPrice()+Levl_Zerro*Point)<maMirrorOSell))) { if(swCommentary)Print("Безубыток SELL "+DoubleToStr(OrderOpenPrice()-BU*Point,Digits)); if(maMBlock!=1){Print("SELL 2");ModifyStopTake(0,OrderOpenPrice()-BU*Point,takepr);stpls=OrderOpenPrice()-BU*Point;} OrderBU[NorderBU]=OrderTicket();NorderBU++; } // maMBlock!=1&& if(BarSL!=0 && iBarShift(NULL,0,OrderOpenTime())>=BarSL) { if(swCommentary)Print("BARSL SELL"); ClosePosBySelect(); if(blockBarSL>0) { YesBarSLSell=0;if(swCommentary)Print("BARSL SELL"); //ClosePositions("NULL",OP_SELL,Magic); ClosePosBySelect(); } }//BARSL } } Questions from Beginners MQL5 アスク! コーディングの方法は? Vladimir Karputov 2015.08.26 11:33 #4175 -Aleks-:2年うまくいって、バンバンエラーになる......その時の注文が多いのだと思います。以下はそのコードですが、何が問題なのか(太字で強調表示)、アドバイスをお願いします。OrderBUの配列の外に出ている。追加:スタイリングを 使用する - これはコードを読みやすくするのに役立ちます。 Leanid Aladzyeu 2015.08.26 11:54 #4176 -Aleks-:2年うまくいって、バンバンエラーになる......その時の注文が多いのだと思います。以下はそのコードですが、何が問題なのか(太字で強調表示)、アドバイスをお願いします。 if(!CloseOk) { if(OrderType()==OP_BUY) { //Print("BUY=",OrderTicket()); nBuy++; if(lastTimeBuy<1 || lastTimeBuy<OrderOpenTime())lastTimeBuy=OrderOpenTime(); //if (TP_Error<stplvl/Point)TP_Error=stplvl/Point; //if (OrderOpenPrice()+stplvl>MAT)NewTP=Ask+TP_Error*Point;else NewTP=MAT; //if (TP_Error==0)NewTP=MAT; NewTP=NormalizeDouble(MAT,Digits); if(MathAbs(NewTP-OrderTakeProfit())>1*Point) {//модифицируем ТП if(swCommentary) Print("Модификация Тейк-Профита BUY "+DoubleToStr(NewTP,Digits)+" OPEN="+OrderOpenPrice()); ModifyStopTake(0,stpls,NewTP);takepr=NewTP; } if(BU!=0 && OrderStopLoss()!=(OrderOpenPrice()+BU*Point) && //безубыток Bid>BUbuy && Ask>(OrderOpenPrice()+BU*Point+stplvl) && (Levl_Zerro==0 || (maMirrorOBuy<(OrderOpenPrice()-Levl_Zerro*Point)))) { if(swCommentary)Print("Безубыток BUY "+DoubleToStr(OrderOpenPrice()+BU*Point,Digits)); if(maMBlock!=1){Print("BUY 2");ModifyStopTake(0,OrderOpenPrice()+BU*Point,takepr);stpls=OrderOpenPrice()+BU*Point;} OrderBU[NorderBU]=OrderTicket();NorderBU++; }//maMBlock!=1&& if(BarSL!=0 && iBarShift(NULL,0,OrderOpenTime())>=BarSL) { if(swCommentary)Print("BARSL BUY");ClosePosBySelect(); if(blockBarSL>0) { YesBarSLBuy=0;if(swCommentary)Print("blockBARSL BUY"); //ClosePositions("NULL",OP_BUY,Magic); ClosePosBySelect(); } }//BARSL } if(OrderType()==OP_SELL) { //Print("SELL=",OrderTicket()); nSell++; if(lastTimeSell<1 || lastTimeSell<OrderOpenTime())lastTimeSell=OrderOpenTime(); //if (TP_Error<stplvl/Point)TP_Error=stplvl/Point; //if (OrderOpenPrice()-stplvl<MAT)NewTP=Bid-TP_Error*Point;else NewTP=MAT; //if (TP_Error==0)NewTP=MAT; NewTP=NormalizeDouble(MAT,Digits); if(MathAbs(NewTP-OrderTakeProfit())>1*Point) {//модифицируем ТП if(swCommentary) Print("Модификация Тейк-Профита SELL "+DoubleToStr(NewTP,Digits)+" OPEN="+OrderOpenPrice()+ " STOP="+OrderStopLoss()); ModifyStopTake(0,stpls,NewTP);takepr=NewTP; } if(BU!=0 && OrderStopLoss()!=(OrderOpenPrice()-BU*Point) && Bid<BUsell && //безубыток Bid<(OrderOpenPrice()-BU*Point-stplvl) && (Levl_Zerro==0 || ((OrderOpenPrice()+Levl_Zerro*Point)<maMirrorOSell))) { if(swCommentary)Print("Безубыток SELL "+DoubleToStr(OrderOpenPrice()-BU*Point,Digits)); if(maMBlock!=1){Print("SELL 2");ModifyStopTake(0,OrderOpenPrice()-BU*Point,takepr);stpls=OrderOpenPrice()-BU*Point;} OrderBU[NorderBU]=OrderTicket();NorderBU++; } // maMBlock!=1&& if(BarSL!=0 && iBarShift(NULL,0,OrderOpenTime())>=BarSL) { if(swCommentary)Print("BARSL SELL"); ClosePosBySelect(); if(blockBarSL>0) { YesBarSLSell=0;if(swCommentary)Print("BARSL SELL"); //ClosePositions("NULL",OP_SELL,Magic); ClosePosBySelect(); } }//BARSL } }Out of array "というエラーは、EAが配列の初期化 または配列の処理よりも大きな値を要求していることを意味します。例えば、6つのパラメータを処理する配列の場合、初期化では6(処理する内容は0から5まで)、カウントは0から、初期化は1からにする必要があります。 Aleksey Vyazmikin 2015.08.26 11:56 #4177 Karputov Vladimir:OrderBUの配列の外に出ている。追加:スタイリングを 使用する - これはコードを読みやすくするのに役立ちます。ヒントありがとうございます!配列ウィンドウはちゃんとArrayResize(OrderBU,1000);になっているのですが、どうしてでしょう...。お金を払って、書いてもらって、それをじっくり検討する。 Leanid Aladzyeu 2015.08.26 18:49 #4178 2桁と4桁のブローカー、金属は小数点以下何桁? Artyom Trishkin 2015.08.26 19:21 #4179 -Aleks-:ヒントありがとうございます!配列ウィンドウはちゃんとArrayResize(OrderBU,1000);になっているのですが、どうしてでしょう...。お金を払って、書いてもらって、それをじっくり検討する。 2年経過」しているので、古いmql4用に書かれたコードで、そこでは配列から 抜け出すことが「可能」だったが、今は「不可能」なので、今はエラーになっているということです。その通りです。 Aleksey Vyazmikin 2015.08.26 19:36 #4180 Artyom Trishkin: 2年前から動いている」ということは、配列のオーバーランが「許される」古いmql4用に書かれたコードで、今は許されない、エラーになる、ということですね。その通りです。 2年 - テスターで :)そして、デモコードは1年前から動いています。そこでは、外部クラスの関係で差し込む際にエラーが多発したのですが......。そして今、どうしたらいいかわからないバグが発生しています。とりあえず配列のサイズを 1桁大きくしてみることにします。なぜ、グラフィックバッファのような自動サイズがないのでしょうか? 1...411412413414415416417418419420421422423424425...1503 新しいコメント 理由: キャンセル 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
こんにちは、このエラーが発生しました -ストラテジーテスターの ログから。
2015.08.26 14:09:47.704 2001.08.29 16:15 'Kamikadze_MA_V_04_42_Fibo_03.mq4' (929,29) で範囲外の配列。
(929,29) - これは文字列で、文字列の中の文字のシーケンス番号ですか?
こんにちは、このエラーが発生しました -ストラテジーテスターの ログから。
2015.08.26 14:09:47.704 2001.08.29 16:15 'Kamikadze_MA_V_04_42_Fibo_03.mq4' (929,29) で範囲外の配列。
(929,29) - これは文字列で、文字列の中の文字のシーケンス番号ですか?
こんにちは、このエラーが発生しました -ストラテジーテスターの ログから。
2015.08.26 14:09:47.704 2001.08.29 16:15 'Kamikadze_MA_V_04_42_Fibo_03.mq4' (929,29) で範囲外の配列。
(929,29) - これは文字列で、文字列の中の文字のシーケンス番号ですか?
はい。
2年うまくいって、バンバンエラーになる......その時の注文が多いのだと思います。以下はそのコードですが、何が問題なのか(太字で強調表示)、アドバイスをお願いします。
if(!CloseOk)
{
if(OrderType()==OP_BUY)
{
//Print("BUY=",OrderTicket());
nBuy++;
if(lastTimeBuy<1 || lastTimeBuy<OrderOpenTime())lastTimeBuy=OrderOpenTime();
//if (TP_Error<stplvl/Point)TP_Error=stplvl/Point;
//if (OrderOpenPrice()+stplvl>MAT)NewTP=Ask+TP_Error*Point;else NewTP=MAT;
//if (TP_Error==0)NewTP=MAT;
NewTP=NormalizeDouble(MAT,Digits);
if(MathAbs(NewTP-OrderTakeProfit())>1*Point)
{//модифицируем ТП
if(swCommentary)
Print("Модификация Тейк-Профита BUY "+DoubleToStr(NewTP,Digits)+" OPEN="+OrderOpenPrice());
ModifyStopTake(0,stpls,NewTP);takepr=NewTP;
}
if(BU!=0 && OrderStopLoss()!=(OrderOpenPrice()+BU*Point) && //безубыток
Bid>BUbuy && Ask>(OrderOpenPrice()+BU*Point+stplvl) &&
(Levl_Zerro==0 || (maMirrorOBuy<(OrderOpenPrice()-Levl_Zerro*Point))))
{
if(swCommentary)Print("Безубыток BUY "+DoubleToStr(OrderOpenPrice()+BU*Point,Digits));
if(maMBlock!=1){Print("BUY 2");ModifyStopTake(0,OrderOpenPrice()+BU*Point,takepr);stpls=OrderOpenPrice()+BU*Point;}
OrderBU[NorderBU]=OrderTicket();NorderBU++;
}//maMBlock!=1&&
if(BarSL!=0 && iBarShift(NULL,0,OrderOpenTime())>=BarSL)
{
if(swCommentary)Print("BARSL BUY");ClosePosBySelect();
if(blockBarSL>0)
{
YesBarSLBuy=0;if(swCommentary)Print("blockBARSL BUY");
//ClosePositions("NULL",OP_BUY,Magic);
ClosePosBySelect();
}
}//BARSL
}
if(OrderType()==OP_SELL)
{
//Print("SELL=",OrderTicket());
nSell++;
if(lastTimeSell<1 || lastTimeSell<OrderOpenTime())lastTimeSell=OrderOpenTime();
//if (TP_Error<stplvl/Point)TP_Error=stplvl/Point;
//if (OrderOpenPrice()-stplvl<MAT)NewTP=Bid-TP_Error*Point;else NewTP=MAT;
//if (TP_Error==0)NewTP=MAT;
NewTP=NormalizeDouble(MAT,Digits);
if(MathAbs(NewTP-OrderTakeProfit())>1*Point)
{//модифицируем ТП
if(swCommentary)
Print("Модификация Тейк-Профита SELL "+DoubleToStr(NewTP,Digits)+" OPEN="+OrderOpenPrice()+
" STOP="+OrderStopLoss());
ModifyStopTake(0,stpls,NewTP);takepr=NewTP;
}
if(BU!=0 && OrderStopLoss()!=(OrderOpenPrice()-BU*Point) && Bid<BUsell && //безубыток
Bid<(OrderOpenPrice()-BU*Point-stplvl) &&
(Levl_Zerro==0 || ((OrderOpenPrice()+Levl_Zerro*Point)<maMirrorOSell)))
{
if(swCommentary)Print("Безубыток SELL "+DoubleToStr(OrderOpenPrice()-BU*Point,Digits));
if(maMBlock!=1){Print("SELL 2");ModifyStopTake(0,OrderOpenPrice()-BU*Point,takepr);stpls=OrderOpenPrice()-BU*Point;}
OrderBU[NorderBU]=OrderTicket();NorderBU++;
} // maMBlock!=1&&
if(BarSL!=0 && iBarShift(NULL,0,OrderOpenTime())>=BarSL)
{
if(swCommentary)Print("BARSL SELL");
ClosePosBySelect();
if(blockBarSL>0)
{
YesBarSLSell=0;if(swCommentary)Print("BARSL SELL");
//ClosePositions("NULL",OP_SELL,Magic);
ClosePosBySelect();
}
}//BARSL
}
}
2年うまくいって、バンバンエラーになる......その時の注文が多いのだと思います。以下はそのコードですが、何が問題なのか(太字で強調表示)、アドバイスをお願いします。
OrderBUの配列の外に出ている。
追加:スタイリングを 使用する - これはコードを読みやすくするのに役立ちます。
2年うまくいって、バンバンエラーになる......その時の注文が多いのだと思います。以下はそのコードですが、何が問題なのか(太字で強調表示)、アドバイスをお願いします。
if(!CloseOk)
{
if(OrderType()==OP_BUY)
{
//Print("BUY=",OrderTicket());
nBuy++;
if(lastTimeBuy<1 || lastTimeBuy<OrderOpenTime())lastTimeBuy=OrderOpenTime();
//if (TP_Error<stplvl/Point)TP_Error=stplvl/Point;
//if (OrderOpenPrice()+stplvl>MAT)NewTP=Ask+TP_Error*Point;else NewTP=MAT;
//if (TP_Error==0)NewTP=MAT;
NewTP=NormalizeDouble(MAT,Digits);
if(MathAbs(NewTP-OrderTakeProfit())>1*Point)
{//модифицируем ТП
if(swCommentary)
Print("Модификация Тейк-Профита BUY "+DoubleToStr(NewTP,Digits)+" OPEN="+OrderOpenPrice());
ModifyStopTake(0,stpls,NewTP);takepr=NewTP;
}
if(BU!=0 && OrderStopLoss()!=(OrderOpenPrice()+BU*Point) && //безубыток
Bid>BUbuy && Ask>(OrderOpenPrice()+BU*Point+stplvl) &&
(Levl_Zerro==0 || (maMirrorOBuy<(OrderOpenPrice()-Levl_Zerro*Point))))
{
if(swCommentary)Print("Безубыток BUY "+DoubleToStr(OrderOpenPrice()+BU*Point,Digits));
if(maMBlock!=1){Print("BUY 2");ModifyStopTake(0,OrderOpenPrice()+BU*Point,takepr);stpls=OrderOpenPrice()+BU*Point;}
OrderBU[NorderBU]=OrderTicket();NorderBU++;
}//maMBlock!=1&&
if(BarSL!=0 && iBarShift(NULL,0,OrderOpenTime())>=BarSL)
{
if(swCommentary)Print("BARSL BUY");ClosePosBySelect();
if(blockBarSL>0)
{
YesBarSLBuy=0;if(swCommentary)Print("blockBARSL BUY");
//ClosePositions("NULL",OP_BUY,Magic);
ClosePosBySelect();
}
}//BARSL
}
if(OrderType()==OP_SELL)
{
//Print("SELL=",OrderTicket());
nSell++;
if(lastTimeSell<1 || lastTimeSell<OrderOpenTime())lastTimeSell=OrderOpenTime();
//if (TP_Error<stplvl/Point)TP_Error=stplvl/Point;
//if (OrderOpenPrice()-stplvl<MAT)NewTP=Bid-TP_Error*Point;else NewTP=MAT;
//if (TP_Error==0)NewTP=MAT;
NewTP=NormalizeDouble(MAT,Digits);
if(MathAbs(NewTP-OrderTakeProfit())>1*Point)
{//модифицируем ТП
if(swCommentary)
Print("Модификация Тейк-Профита SELL "+DoubleToStr(NewTP,Digits)+" OPEN="+OrderOpenPrice()+
" STOP="+OrderStopLoss());
ModifyStopTake(0,stpls,NewTP);takepr=NewTP;
}
if(BU!=0 && OrderStopLoss()!=(OrderOpenPrice()-BU*Point) && Bid<BUsell && //безубыток
Bid<(OrderOpenPrice()-BU*Point-stplvl) &&
(Levl_Zerro==0 || ((OrderOpenPrice()+Levl_Zerro*Point)<maMirrorOSell)))
{
if(swCommentary)Print("Безубыток SELL "+DoubleToStr(OrderOpenPrice()-BU*Point,Digits));
if(maMBlock!=1){Print("SELL 2");ModifyStopTake(0,OrderOpenPrice()-BU*Point,takepr);stpls=OrderOpenPrice()-BU*Point;}
OrderBU[NorderBU]=OrderTicket();NorderBU++;
} // maMBlock!=1&&
if(BarSL!=0 && iBarShift(NULL,0,OrderOpenTime())>=BarSL)
{
if(swCommentary)Print("BARSL SELL");
ClosePosBySelect();
if(blockBarSL>0)
{
YesBarSLSell=0;if(swCommentary)Print("BARSL SELL");
//ClosePositions("NULL",OP_SELL,Magic);
ClosePosBySelect();
}
}//BARSL
}
}
Out of array "というエラーは、EAが配列の初期化 または配列の処理よりも大きな値を要求していることを意味します。
例えば、6つのパラメータを処理する配列の場合、初期化では6(処理する内容は0から5まで)、カウントは0から、初期化は1からにする必要があります。
OrderBUの配列の外に出ている。
追加:スタイリングを 使用する - これはコードを読みやすくするのに役立ちます。
ヒントありがとうございます!配列ウィンドウはちゃんとArrayResize(OrderBU,1000);になっているのですが、どうしてでしょう...。
お金を払って、書いてもらって、それをじっくり検討する。
ヒントありがとうございます!配列ウィンドウはちゃんとArrayResize(OrderBU,1000);になっているのですが、どうしてでしょう...。
お金を払って、書いてもらって、それをじっくり検討する。
2年前から動いている」ということは、配列のオーバーランが「許される」古いmql4用に書かれたコードで、今は許されない、エラーになる、ということですね。その通りです。