MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 306 1...299300301302303304305306307308309310311312313...1953 新しいコメント mila.com 2017.09.09 04:53 #3051 Alexey Viktorov:そして、それ以外にはありえないのです。1970年以下の年を知っているコンピュータはない。ブローカーの見積書に表示されている年号から始めます。 なるほど)ありがとうございます。 Alexey Viktorov 2017.09.09 08:29 #3052 Aleksey Vyazmikin:MT5でのコード結果 SZZY: コードを変更しました。その考えはすぐには理解できませんでした。mql5ではやったことがないので、考えてみます。しかし、mql4では以下の方法で行うことができます。さらに2つのバッファを作成します。N本のバーのオフセットを設定し、このN本のバーをメインバッファの最後の値で埋めます。そしてもちろん、これらの追加バッファのインデックスN+1は空の値で満たされます。 Aleksey Vyazmikin 2017.09.09 11:39 #3053 Alexey Viktorov:その考えはすぐには理解できませんでした。mql5ではやってないので、考えないといけませんね。しかし、mql4では次のような方法で行うことができます。さらに2つのバッファを作成します。それらにN本のバーのオフセットを設定し、このN本のバーをメインバッファの最後の値で埋めます。そしてもちろん、これらの追加バッファのインデックスN+1は空の値で満たされます。アイデアありがとうございます。もともとMT5でそうしていたのですが、その後最適化しました。とにかく、午前4時に寝てしまいましたが(もちろん公開コードは完全ではありません)、2つのバッファで私が望んだことを行いました。問題は、MT5では充填が左から右に、MT4ではその逆であることでした。ArraySetAsSeries 関数は役に立たず、実際、すべてのロジックを書き直しました。 niktach 2017.09.10 02:13 #3054 アルテムさん、こんにちは。TrExp_Nik ver.の手直しについてお願いしたいのですが。Breakevenに移行させる可能性を追加したいのですが、私の限られたプログラミングスキルでは不可能です。e-MovingInWLのコードを私のEAに統合することにしましたが、変数を正しく組み合わせることができませんし、2番目のBreakeven Expert Advisorのコードを正しく理解していません。おそらく、これは最適なバリエーションではないでしょう。どうすればもっと良くなるか、もっと簡単にできるか、アドバイスをお願いしたい。 ファイル: TrExp_Nik_lcvp._4.mq4 47 kb e-MovingInWL.mq4 3 kb Artyom Trishkin 2017.09.10 02:20 #3055 niktach:アルテムさん、こんにちは。TrExp_Nik ver.の手直しについてお願いしたいのですが。Breakevenに移行させる可能性を追加したいのですが、私の限られたプログラミングスキルでは不可能です。e-MovingInWLのコードを私のEAに統合することにしましたが、変数を正しく組み合わせることができませんし、2番目のBreakeven Expert Advisorのコードを正しく理解していません。おそらく、これは最適なバリエーションではないでしょう。改善や簡略化について、アドバイスをお願いしたいです。ごきげんよう。具体的にはどのようなことに挑戦されたのでしょうか?添付のコードは2つだけですね。何でもやってくれる人が必要なら、それこそフリーランスが いい。そして、自分でやろうとしているのなら、どこがどうわからないのか、具体的に示してください。 oddball 2017.09.10 16:29 #3056 こんにちは。チャート上に配置された "triangle "グラフィックオブジェクトのプロパティをプログラムで取得する方法はありますか?プロパティフォームをインタラクティブに開いたときに「パラメータ」タブに表示される、頂点の時間座標と価格座標のことです。ObjectGetInteger 関数やObjectGetDouble関数を使ってみましたが、1つの頂点のデータしか取得することができません。ありがとうございます。 Artyom Trishkin 2017.09.10 18:00 #3057 oddball:こんにちは。チャート上に配置された "triangle "グラフィックオブジェクトのプロパティをプログラムで取得する方法はありますか?プロパティフォームをインタラクティブに開いたときに「パラメータ」タブに表示される、頂点の時間座標と価格座標のことです。ObjectGetInteger関数やObjectGetDouble関数を使ってみましたが、1つの頂点のデータしか取得することができません。ありがとうございます。はい、できます。そして、その思考の方向性は正しいのです。どのようにパラメータを取得しようとしたのか、教えてください。 rabanik 2017.09.11 11:18 #3058 Artyom Trishkin:チケットで注文を選択する場合、pool を 指定する必要はありません - MODE_TRADES はここでは冗長です - チケットで選択する場合、このパラメータは無視され、注文は2つのリストのうちの1つから選択されます - クローズドリストまたはマーケットポジションのリストから - それはポジションが まだクローズ されていないかどうかによって決まります。チケットに基づく注文の選択が成功した後、注文が2つのリストのどちらから選択されたかを理解するために、ポジションの終了時間を確認する必要があります - それがゼロより大きい場合、注文はすでに閉じられ、履歴注文のリストから選択されました、それ以外の場合 - 注文はまだ市場にあります。この行には基本的にエラーはありません(関数の戻り値をチェックしていないこと、この場合無視される修飾子を使用していること、閉じ括弧の後に ";" がないことを除けば)。ご返信ありがとうございました。これが関数全体です。ポイントは、注文をオープンし、修正によって一定のストップロスとテイクプロフィットの値を追加していることです。注文は出ているがストップロスやテイクプロフィットが設定されていない(赤字の計算関数で、OrderSelect(Ticket,SELECT_BY_TICKET,MODE_TRADES)でエラー(( )が出る//オープンオーダー機能、変数:シンボル、オーダータイプ、ロット、オープン価格、TPとSLの計算方法(0 - 価格に設定、1 - オープン価格から計算すべきポイントに設定)、ストップロス、テイクプロフィット)。/Symbol/Pair、オープンオーダーの種類 - 保留、オープン価格、switch = 1、SL B TP - ストップロスとテイクプロフィットの値は一定です!bool SendOrder(string Symb,int Type,double OP,int Mode) { 色 CL; double Pp = MarketInfo(Symb, MODE_POINT); if (Type==0) CL=Blue; if (Type==1) CL=Red; if (Type==2 || Type==4) CL=DarkTurquoise; if (Type==3 || Type==5) CL=Orange;//Verview Volume if(MarketInfo(Symb,MODE_LOTSTEP)==0.01) DG=2; else DG=1; if (Lot<MarketInfo(Symb,MODE_MINLOT))Lot=MarketInfo(Symb,MODE_MINLOT); if (Lot>MarketInfo(Symb,MODE_MAXLOT))Lot=MarketInfo(Symb,MODE_MAXLOT); if (Lot*MarketInfo(Symb,MODE_MARGINREQUIRED)>AccountEquity()){ PnC(StringConcatenate("Not enough money to open trade",Type,")。",DoubleToStr(Lot,DG)),0); return;}// 保留注文のチェック/* double Slv = MarketInfo(Symb,MODE_STOPLEVEL)*Pp; if (Type>1) { if (Type==2 && MarketInfo(Symb,MODE_ASK)-OP<Slv) OP=MarketInfo(Symb,MODE_ASK)-Slv.JP.JP.JP.JP.JP.JP.JP.JP.JP.JP.JP.JP.JP.JP; if (Type==3 && OP-MarketInfo(Symb,MODE_BID)<Slv) OP=MarketInfo(Symb,MODE_BID)+Slv; if (Type==4 && OP-MarketInfo(Symb,MODE_ASK)<Slv) OP=MarketInfo(Symb,MODE_ASK)+Slv; if (Type==5 && MarketInfo(Symb,MODE_BID)-OP<Slv) OP=MarketInfo(Symb,MODE_BID)-Slv; 。}*/ RefreshRates(); int Min_Dist = MarketInfo(Symb,MODE_STOPLEVEL); //ストップロス/ステークプロフィットレベルをポイントで制限。最小距離 double Tek_Ask = MarketInfo(Symb,MODE_ASK); //最後に受け取った売値。現在のシンボルの定義済み変数Askに格納されます double Tek_Bid = MarketInfo(Symb,MODE_BID); //最後に受信した入札価格です。これは、現在のシンボルの定義済み変数 Bid に格納されます double Tek_Point = MarketInfo(Symb,MODE_POINT); //クォート通貨でのポイントサイズです。現在のシンボルの定義済み変数Pointに格納されます int Tek_Digits = MarketInfo(Symb,MODE_DIGITS);// シンボル価格の小数点以下の桁数です。これは、定義済みの変数 Digits に格納されます double Slv = NormalizeDouble(Min_Dist*Tek_Point,Tek_Digits); if (Type>1) { if (Type==2 && Tek_Ask - OP < Slv) OP = Tek_Ask - Slv; if (Type==3 && OP - Tek_Bid < Slv) OP = Tek_Bid + Slv; if (Type==4 && OP - Tek_Ask < Slv) OP = Tek_Ask + Slv if (Type==5 && Tek_Bid - OP < Slv) OP = Tek_Bid - Slv;}// ストップチェック if (SL!=0 || TP!=0) { if (Mode==0) { if (MathAbs(OP-SL)<Slv && SL!=0) { if (Type==0 || Type==2 || Type==4) SL=OP-Slv; else SL=OP+Slv;} if (MathAbs(OP-TP)<Slv && TP!=0) { if (Type==0 || Type==2 || Type==4) TP=OP+Slv; else TP=OP-Slv;}}else{ if (SL*Pp<Slv && SL!=0) SL=Slv/Pp; if (TP*Pp<Slv && TP!=0) TP=Slv/Pp;}}// オクトーバー for(int k=0;k<=TryToTrade;k++) { if (Type==0) OP=MarketInfo(Symb,MODE_ASK); if (Type==1) OP=MarketInfo(Symb,MODE_BID); PnC(StringConcatenate("Trying to open order, type.OBJ)"); if (Type==2) OP=MarketInfo(Symb,MODE_ASK); (Type==3) OP="注文を開こうとしています。",Type," volume: ",Lot," price: ",OP),0); if (IsTradeAllowed()){ int Ticket=OrderSend(Symb,Type,Lot,NormalizeDouble(OP,MarketInfo(Symb,MODE_DIGITS)),3,0,0,NULL,Tek_Magic,0,CL);}else{ PnC(StringConcatenate("Cannot open order ",k),0;)).Sleep(3000); continue; } if (Ticket >= 0) { PnC(StringConcatenate("Order opened ",Ticket),0); break; } LastError=Fun_Error(GetLastError()); if (LastError==0) { (LastErrorが0の場合。 RefreshRates(); Sleep(WaitTime); if (k==TryToTrade) return(false); } if (LastError==1) return(false); if (LastError==2) { Work=false;return(false); }}// ストップの設定 OrderSelect(Ticket,SELECT_BY_TICKET,MODE_TRADES); if (SL==0 && TP==0) return; if (Mode==1) { if (SL!=0) { if (Type==0 || Type==2 || Type==4) SL=OrderOpenPrice()-SL*Pp; if (Type==1 || Type==3 || Type==5) SL=OrderOpenPrice()+SL*Pp;} if (TP!)=0) { if (Type==0 || Type==2 || Type==4) TP=OrderOpenPrice()+TP*Pp; if (Type==1 || Type==3 || Type==5) TP=OrderOpenPrice()-TP*Pp; 。}} for(k=0;k<=TryToTrade;k++) { PnC(StringConcatenate("Trying to set stops on the order."):",Ticket," s/l: ",SL," t/p: ",TP),0); if (IsTradeAllowed()の場合。){//TickeT=OrderModify(Ticket,NormalizeDouble(OrderOpenPrice(,MarketInfo(Symb,MODE_DIGITS)),NormalizeDouble(Symb,MarketInfo(Symb,MODE_DIGITS)),NormalizeDouble(TP,MarketInfo(Symb,MODE_DIGITS)),0,CLR_NONE); 。TickeT=OrderModify(Ticket,NormalizeDouble(OrderOpenPrice(,MarketInfo(Symb,MODE_DIGITS)),NormalizeDouble(SL,MarketInfo(Symb,MODE_DIGITS)),NormalizeDouble(TP,MarketInfo(Symb,MODE_DIGITS)),0,CLR_NONE)}else{ PnC(StringConcatenate("Cannot modify order ",k),0);Sleep(3000); continue; } if (TickeT == true) { PnC(StringConcatenate("Order Modified ",Ticket),0);break; } LastError=Fun_Error(GetLastError()); if (LastError==0) { RefreshRates(); Sleep(WaitTime); if (k==TryToTrade) return(false); } if (LastError==1) return(false); if (LastError==2) { Work=false; return(false); }} return(true)。} Any questions from newcomers コーディングのヘルプ How to get correct forexman77 2017.09.11 11:57 #3059 注文を修正するときにエラー131"間違ったボリューム"が出るのはなぜか、誰か説明してください。保留は正常に開き、ロットは正規化され、印刷に出力すると最小ロットは0.01で、これは私の数量(デモ口座)より少なくない。フォーラムをすべて読み直しましたが、問題は見つかりませんでした 裏側で何が起こっているのか、何が描かれていないのか、今も気になるところです。 forexman77 2017.09.11 12:40 #3060 forexman77:注文を修正するときにエラー131"間違ったボリューム"が出るのはなぜか、誰か説明してください。保留は正常に開き、ロットは正規化され、印刷に出力すると最小ロットは0.01で、これは私の数量(デモ口座)より少なくない。フォーラムをすべて読み直したのですが、問題が見つかりませんでした。 ただ、記述されていない隠れたバグが出現して驚くこともなくはない。他の証券会社で試してみたが、気持ちは変わらなかった。問題は、電話するときの理由です。double MinLot = MarketInfo(Symbol(),MODE_MINLOT); double MaxLot = MarketInfo(Symbol(),MODE_MAXLOT); Alert("MinLot=",MinLot,"MaxLot=",MaxLot); は0.01を差し引き、ボットは131をプリントする? 1...299300301302303304305306307308309310311312313...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
そして、それ以外にはありえないのです。1970年以下の年を知っているコンピュータはない。ブローカーの見積書に表示されている年号から始めます。
MT5でのコード
結果
SZZY: コードを変更しました。その考えはすぐには理解できませんでした。mql5ではやったことがないので、考えてみます。しかし、mql4では以下の方法で行うことができます。
さらに2つのバッファを作成します。
N本のバーのオフセットを設定し、このN本のバーをメインバッファの最後の値で埋めます。
そしてもちろん、これらの追加バッファのインデックスN+1は空の値で満たされます。
その考えはすぐには理解できませんでした。mql5ではやってないので、考えないといけませんね。しかし、mql4では次のような方法で行うことができます。
さらに2つのバッファを作成します。
それらにN本のバーのオフセットを設定し、このN本のバーをメインバッファの最後の値で埋めます。
そしてもちろん、これらの追加バッファのインデックスN+1は空の値で満たされます。
アイデアありがとうございます。もともとMT5でそうしていたのですが、その後最適化しました。
とにかく、午前4時に寝てしまいましたが(もちろん公開コードは完全ではありません)、2つのバッファで私が望んだことを行いました。
問題は、MT5では充填が左から右に、MT4ではその逆であることでした。ArraySetAsSeries 関数は役に立たず、実際、すべてのロジックを書き直しました。
アルテムさん、こんにちは。
TrExp_Nik ver.の手直しについてお願いしたいのですが。Breakevenに移行させる可能性を追加したいのですが、私の限られたプログラミングスキルでは不可能です。e-MovingInWLのコードを私のEAに統合することにしましたが、変数を正しく組み合わせることができませんし、2番目のBreakeven Expert Advisorのコードを正しく理解していません。おそらく、これは最適なバリエーションではないでしょう。どうすればもっと良くなるか、もっと簡単にできるか、アドバイスをお願いしたい。
アルテムさん、こんにちは。
TrExp_Nik ver.の手直しについてお願いしたいのですが。Breakevenに移行させる可能性を追加したいのですが、私の限られたプログラミングスキルでは不可能です。e-MovingInWLのコードを私のEAに統合することにしましたが、変数を正しく組み合わせることができませんし、2番目のBreakeven Expert Advisorのコードを正しく理解していません。おそらく、これは最適なバリエーションではないでしょう。改善や簡略化について、アドバイスをお願いしたいです。
ごきげんよう。具体的にはどのようなことに挑戦されたのでしょうか?添付のコードは2つだけですね。何でもやってくれる人が必要なら、それこそフリーランスが いい。
そして、自分でやろうとしているのなら、どこがどうわからないのか、具体的に示してください。
こんにちは。
チャート上に配置された "triangle "グラフィックオブジェクトのプロパティをプログラムで取得する方法はありますか?プロパティフォームをインタラクティブに開いたときに「パラメータ」タブに表示される、頂点の時間座標と価格座標のことです。ObjectGetInteger 関数やObjectGetDouble関数を使ってみましたが、1つの頂点のデータしか取得することができません。
ありがとうございます。
こんにちは。
チャート上に配置された "triangle "グラフィックオブジェクトのプロパティをプログラムで取得する方法はありますか?プロパティフォームをインタラクティブに開いたときに「パラメータ」タブに表示される、頂点の時間座標と価格座標のことです。ObjectGetInteger関数やObjectGetDouble関数を使ってみましたが、1つの頂点のデータしか取得することができません。
ありがとうございます。
はい、できます。そして、その思考の方向性は正しいのです。どのようにパラメータを取得しようとしたのか、教えてください。
チケットで注文を選択する場合、pool を 指定する必要はありません - MODE_TRADES はここでは冗長です - チケットで選択する場合、このパラメータは無視され、注文は2つのリストのうちの1つから選択されます - クローズドリストまたはマーケットポジションのリストから - それはポジションが まだクローズ されていないかどうかによって決まります。
チケットに基づく注文の選択が成功した後、注文が2つのリストのどちらから選択されたかを理解するために、ポジションの終了時間を確認する必要があります - それがゼロより大きい場合、注文はすでに閉じられ、履歴注文のリストから選択されました、それ以外の場合 - 注文はまだ市場にあります。
この行には基本的にエラーはありません(関数の戻り値をチェックしていないこと、この場合無視される修飾子を使用していること、閉じ括弧の後に ";" がないことを除けば)。
ご返信ありがとうございました。
これが関数全体です。ポイントは、注文をオープンし、修正によって一定のストップロスとテイクプロフィットの値を追加していることです。
注文は出ているがストップロスやテイクプロフィットが設定されていない(赤字の計算関数で、OrderSelect(Ticket,SELECT_BY_TICKET,MODE_TRADES)でエラー(( )が出る
//オープンオーダー機能、変数:シンボル、オーダータイプ、ロット、オープン価格、TPとSLの計算方法(0 - 価格に設定、1 - オープン価格から計算すべきポイントに設定)、ストップロス、テイクプロフィット)。
/Symbol/Pair、オープンオーダーの種類 - 保留、オープン価格、switch = 1、SL B TP - ストップロスとテイクプロフィットの値は一定です!
bool SendOrder(string Symb,int Type,double OP,int Mode) {
色 CL;
double Pp = MarketInfo(Symb, MODE_POINT);
if (Type==0) CL=Blue;
if (Type==1) CL=Red;
if (Type==2 || Type==4) CL=DarkTurquoise;
if (Type==3 || Type==5) CL=Orange;
//Verview Volume
if(MarketInfo(Symb,MODE_LOTSTEP)==0.01) DG=2; else DG=1;
if (Lot<MarketInfo(Symb,MODE_MINLOT))Lot=MarketInfo(Symb,MODE_MINLOT);
if (Lot>MarketInfo(Symb,MODE_MAXLOT))Lot=MarketInfo(Symb,MODE_MAXLOT);
if (Lot*MarketInfo(Symb,MODE_MARGINREQUIRED)>AccountEquity()){
PnC(StringConcatenate("Not enough money to open trade",Type,")。",DoubleToStr(Lot,DG)),0);
return;
}
// 保留注文のチェック
/*
double Slv = MarketInfo(Symb,MODE_STOPLEVEL)*Pp;
if (Type>1) {
if (Type==2 && MarketInfo(Symb,MODE_ASK)-OP<Slv) OP=MarketInfo(Symb,MODE_ASK)-Slv.JP.JP.JP.JP.JP.JP.JP.JP.JP.JP.JP.JP.JP.JP;
if (Type==3 && OP-MarketInfo(Symb,MODE_BID)<Slv) OP=MarketInfo(Symb,MODE_BID)+Slv;
if (Type==4 && OP-MarketInfo(Symb,MODE_ASK)<Slv) OP=MarketInfo(Symb,MODE_ASK)+Slv;
if (Type==5 && MarketInfo(Symb,MODE_BID)-OP<Slv) OP=MarketInfo(Symb,MODE_BID)-Slv;
。}
*/
RefreshRates();
int Min_Dist = MarketInfo(Symb,MODE_STOPLEVEL); //ストップロス/ステークプロフィットレベルをポイントで制限。最小距離
double Tek_Ask = MarketInfo(Symb,MODE_ASK); //最後に受け取った売値。現在のシンボルの定義済み変数Askに格納されます
double Tek_Bid = MarketInfo(Symb,MODE_BID); //最後に受信した入札価格です。これは、現在のシンボルの定義済み変数 Bid に格納されます
double Tek_Point = MarketInfo(Symb,MODE_POINT); //クォート通貨でのポイントサイズです。現在のシンボルの定義済み変数Pointに格納されます
int Tek_Digits = MarketInfo(Symb,MODE_DIGITS);// シンボル価格の小数点以下の桁数です。これは、定義済みの変数 Digits に格納されます
double Slv = NormalizeDouble(Min_Dist*Tek_Point,Tek_Digits);
if (Type>1) {
if (Type==2 && Tek_Ask - OP < Slv) OP = Tek_Ask - Slv;
if (Type==3 && OP - Tek_Bid < Slv) OP = Tek_Bid + Slv;
if (Type==4 && OP - Tek_Ask < Slv) OP = Tek_Ask + Slv
if (Type==5 && Tek_Bid - OP < Slv) OP = Tek_Bid - Slv;
}
// ストップチェック
if (SL!=0 || TP!=0) {
if (Mode==0) {
if (MathAbs(OP-SL)<Slv && SL!=0) {
if (Type==0 || Type==2 || Type==4) SL=OP-Slv; else SL=OP+Slv;
}
if (MathAbs(OP-TP)<Slv && TP!=0) {
if (Type==0 || Type==2 || Type==4) TP=OP+Slv; else TP=OP-Slv;
}
}else{
if (SL*Pp<Slv && SL!=0) SL=Slv/Pp;
if (TP*Pp<Slv && TP!=0) TP=Slv/Pp;
}
}
// オクトーバー
for(int k=0;k<=TryToTrade;k++) {
if (Type==0) OP=MarketInfo(Symb,MODE_ASK);
if (Type==1) OP=MarketInfo(Symb,MODE_BID);
PnC(StringConcatenate("Trying to open order, type.OBJ)"); if (Type==2) OP=MarketInfo(Symb,MODE_ASK); (Type==3) OP="注文を開こうとしています。",Type," volume: ",Lot," price: ",OP),0);
if (IsTradeAllowed()){
int Ticket=OrderSend(Symb,Type,Lot,NormalizeDouble(OP,MarketInfo(Symb,MODE_DIGITS)),3,0,0,NULL,Tek_Magic,0,CL);
}else{ PnC(StringConcatenate("Cannot open order ",k),0;)).Sleep(3000); continue; }
if (Ticket >= 0) { PnC(StringConcatenate("Order opened ",Ticket),0); break; }
LastError=Fun_Error(GetLastError());
if (LastError==0) { (LastErrorが0の場合。
RefreshRates(); Sleep(WaitTime);
if (k==TryToTrade) return(false); }
if (LastError==1) return(false);
if (LastError==2) { Work=false;return(false); }
}
// ストップの設定
OrderSelect(Ticket,SELECT_BY_TICKET,MODE_TRADES);
if (SL==0 && TP==0) return;
if (Mode==1) {
if (SL!=0) {
if (Type==0 || Type==2 || Type==4) SL=OrderOpenPrice()-SL*Pp;
if (Type==1 || Type==3 || Type==5) SL=OrderOpenPrice()+SL*Pp;
}
if (TP!)=0) {
if (Type==0 || Type==2 || Type==4) TP=OrderOpenPrice()+TP*Pp;
if (Type==1 || Type==3 || Type==5) TP=OrderOpenPrice()-TP*Pp;
。}
}
for(k=0;k<=TryToTrade;k++) {
PnC(StringConcatenate("Trying to set stops on the order."):",Ticket," s/l: ",SL," t/p: ",TP),0);
if (IsTradeAllowed()の場合。){
//TickeT=OrderModify(Ticket,NormalizeDouble(OrderOpenPrice(,MarketInfo(Symb,MODE_DIGITS)),NormalizeDouble(Symb,MarketInfo(Symb,MODE_DIGITS)),NormalizeDouble(TP,MarketInfo(Symb,MODE_DIGITS)),0,CLR_NONE);
。TickeT=OrderModify(Ticket,NormalizeDouble(OrderOpenPrice(,MarketInfo(Symb,MODE_DIGITS)),NormalizeDouble(SL,MarketInfo(Symb,MODE_DIGITS)),NormalizeDouble(TP,MarketInfo(Symb,MODE_DIGITS)),0,CLR_NONE)
}else{ PnC(StringConcatenate("Cannot modify order ",k),0);Sleep(3000); continue; }
if (TickeT == true) { PnC(StringConcatenate("Order Modified ",Ticket),0);break; }
LastError=Fun_Error(GetLastError());
if (LastError==0) {
RefreshRates(); Sleep(WaitTime);
if (k==TryToTrade) return(false); }
if (LastError==1) return(false);
if (LastError==2) { Work=false; return(false); }
}
return(true)。
}
注文を修正するときにエラー131"間違ったボリューム"が出るのはなぜか、誰か説明してください。
保留は正常に開き、ロットは正規化され、印刷に出力すると最小ロットは0.01で、これは私の数量(デモ口座)より少なくない。
フォーラムをすべて読み直しましたが、問題は見つかりませんでした
裏側で何が起こっているのか、何が描かれていないのか、今も気になるところです。注文を修正するときにエラー131"間違ったボリューム"が出るのはなぜか、誰か説明してください。
保留は正常に開き、ロットは正規化され、印刷に出力すると最小ロットは0.01で、これは私の数量(デモ口座)より少なくない。
フォーラムをすべて読み直したのですが、問題が見つかりませんでした。
ただ、記述されていない隠れたバグが出現して驚くこともなくはない。他の証券会社で試してみたが、気持ちは変わらなかった。問題は、電話するときの理由です。
は0.01を差し引き、ボットは131をプリントする?