注文が選択されているかどうかを確認する方法 - ページ 12 1...567891011121314151617181920 新しいコメント Алексей Тарабанов 2013.02.22 21:13 #111 grell: それが私の言いたいことです。私の機能には汎用性がなく、それぞれが自分の業務に徹することができるのです。買うと売るでも別々です。だから、注文番号が変わろうが、ストップ高になろうが、チケットとマジシャンは残ります。 まあ、スロソルに夢中になったんでしょう:) Дмитрий 2013.02.22 21:15 #112 tara: まあ、パクリに夢中になったんだろうけど:) まだ、ミスはありません。その点では、私は暴君です:) Boris 2013.02.22 21:16 #113 tara: いや、バターの中のチーズのようにではないですが、中佐としてそれなりに活躍しました。気を悪くされたらごめんなさい :( いや、気を悪くしないで、間違ったことを言ったとしても義務にしないで、心から。:) Алексей Тарабанов 2013.02.22 21:16 #114 borilunad: いいえ、気を悪くする必要はありません。私が間違ったことを言ったとしても、あなたは応じる必要はありませんが、心から。:) 気にしないでください。 Рустам 2013.02.22 21:21 #115 Ant_TL:あなたは私を誤解しています。なぜか半数の人がそうなんです。関数A()で選択されたその注文を関数B()で処理する必要はないのです。関数B()は他の 命令と連動し、どの命令であっても、関数A()とは関係なく、関数B()は独自のロジックを持つ。注文数、総利益、コメント、TP・SLなどをカウントできます。関数B()から関数A()に戻り、関数B()がオーダーをどう処理しても、関数B()が呼ばれる前に関数A()が選択したオーダーはもう選択されず、関数B()が処理した別のランダムオーダーが選択されて、おそらくループ内のオーダーも検索しているので、そこから関数B()が呼ばれた時点では関数A()の動作論理は破られていないようにしなければならないという課題である。 一度に選択できる注文は1 つだけであることを、あなたはずっと忘れています。終了 = オーダーのリストをセービングプール(あなたの配列)に格納します。1つのグローバル変数 lastorder では不十分です。 Рустам 2013.02.22 21:22 #116 //+------------------------------------------------------------------+ //| Description included Functions | //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| ORDERS.mq4 | //| Copyright © 2012. XrustSolution. mail:xrustx@gmail.com | //| https://www.youtube.com/user/opmlv http://forexrust.info | //+------------------------------------------------------------------+ #property copyright "Copyright © 2012. XrustSolution. mail:xrustx@gmail.com" #property link "https://www.youtube.com/user/opmlv http://forexrust.info" //+------------------------------------------------------------------+ //| Defines and Exports and Includes | //+------------------------------------------------------------------+ #define ORDS_TOTAL 100 #define HIST_TOTAL 100000 //+------------------------------------------------------------------+ //| Orders Property Indexes | //+------------------------------------------------------------------+ #define ORD_TICK 0 #define ORD_LOTS 1 #define ORD_OPTM 2 #define ORD_OPPR 3 #define ORD_STOP 4 #define ORD_TAKE 5 #define ORD_CLPR 6 #define ORD_CLTM 7 #define ORD_PROF 8 #define ORD_SWAP 9 #define ORD_COMM 10 #define ORD_EXPR 11 #define ORD_SYMB 12 #define ORD_COMN 13 //+------------------------------------------------------------------+ //| Extern and Global variables | //+---externs--------------------------------------------------------+ //+---globals--------------------------------------------------------+ int gOrdsTotal[7]; // number open orders int gOrdsTicks[ORDS_TOTAL][6]; // array of open ords tickets double gOrdsProps[ORDS_TOTAL][6][12]; // array of open ords properties double gPreOrdsProps[ORDS_TOTAL][6][12]; double gOrdsPrf[6]; // open ords summary profit for order types double gOrdsLts[6]; // open ords summary lots for order types //+------------------------------------------------------------------+ int gHistTotal[7]; // number closed orders int gHistTicks[HIST_TOTAL][6]; // array of closed ords tickets double gHistProps[HIST_TOTAL][6][12]; // array of closed ords properties double gHistPrf[6]; // closed ords summary profit for order types double gHistLts[6]; // closed ords summary lots for order types //+------------------------------------------------------------------+ //| Function : double iOrdProps(OrderType,PropIndex,Count) | //+------------------------------------------------------------------+ double iOrdProps(int type,int indx,int co){int i;double res=0; i = gOrdsTicks[co][type]; if(OrderSelect(i,SELECT_BY_TICKET)){ if(OrderCloseTime()==0){ switch(indx){ case ORD_TICK : res = OrderTicket(); break; case ORD_LOTS : res = OrderLots(); break; case ORD_OPTM : res = OrderOpenTime(); break; case ORD_OPPR : res = OrderOpenPrice(); break; case ORD_STOP : res = OrderStopLoss(); break; case ORD_TAKE : res = OrderTakeProfit(); break; case ORD_CLPR : res = OrderClosePrice(); break; case ORD_CLTM : res = OrderCloseTime(); break; case ORD_PROF : res = OrderProfit(); break; case ORD_SWAP : res = OrderSwap(); break; case ORD_COMM : res = OrderCommission(); break; case ORD_EXPR : res = OrderExpiration(); break; default: res = 0; break; } } }else{ return(EMPTY_VALUE); } return(res); } //+------------------------------------------------------------------+ //| Function : double fOrdProps(OrderType,PropIndex,Count) | //+------------------------------------------------------------------+ double fOrdProps(int type,int indx,int co){return(gOrdsProps[co][type][indx]);} //+------------------------------------------------------------------+ //| Function : int fOrdsTicket(OrderType,Count) | //+------------------------------------------------------------------+ int fOrdsTicket(int type, int indx = 0){return(gOrdsTicks[indx][type]);} //+------------------------------------------------------------------+ //| Function : int fOrdsTotal(OrderType) | //+------------------------------------------------------------------+ int fOrdsTotal(int type = 6){return(gOrdsTotal[type]);} //+------------------------------------------------------------------+ //| Function : double fHistProps(OrderType,PropIndex,Count) | //+------------------------------------------------------------------+ double fHistProps(int type,int indx,int co){return(gOrdsProps[co][type][indx]);} //+------------------------------------------------------------------+ //| Function : int fHistTicket(OrderType,Count) | //+------------------------------------------------------------------+ int fHistTicket(int type, int indx = 0){return(gHistTicks[indx][type]);} //+------------------------------------------------------------------+ //| Function : int fHistTotal(OrderType) | //+------------------------------------------------------------------+ int fHistTotal(int type = 6){return(gOrdsTotal[type]);} //+------------------------------------------------------------------+ //| Function : int HistRefresh(Magik,Comment,Symbol) | //| Copyright © 2012, XrustSolution. mail:xrustx@gmail.com | //| https://www.youtube.com/user/opmlv http://forexrust.info | //+------------------------------------------------------------------+ //| Description: | //+------------------------------------------------------------------+ int HistRefresh(int mn=-1,string comm="",string sy=""){int i,ii=0,type;bool iMn=true,iComm=true; if(mn<0){iMn=false;} ArrayResize(gHistTotal,7); ArrayInitialize(gHistTotal,0); ArrayResize(gHistProps,ORDS_TOTAL); ArrayInitialize(gHistProps,0); ArrayResize(gHistPrf,ORDS_TOTAL); ArrayInitialize(gHistPrf,0); ArrayResize(gHistLts,ORDS_TOTAL); ArrayInitialize(gHistLts,0); if(StringLen(comm)<1){iComm=false;} for(i = OrdersHistoryTotal()-1; i>=0; i--){ if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){ if(OrderType()>5){continue;} if(OrderCloseTime()==0){continue;} if(sy!=""){if(OrderSymbol()!=sy){continue;}} if(iMn){if(OrderMagicNumber()!=mn){continue;}} if(iComm){if(StringFind(OrderComment(),comm)<0){continue;}} type = OrderType(); gHistProps[gHistTotal[type]][type][0] = OrderTicket(); gHistProps[gHistTotal[type]][type][1] = OrderLots(); gHistProps[gHistTotal[type]][type][2] = OrderOpenTime(); gHistProps[gHistTotal[type]][type][3] = OrderOpenPrice(); gHistProps[gHistTotal[type]][type][4] = OrderStopLoss(); gHistProps[gHistTotal[type]][type][5] = OrderTakeProfit(); gHistProps[gHistTotal[type]][type][6] = OrderClosePrice(); gHistProps[gHistTotal[type]][type][7] = OrderCloseTime(); gHistProps[gHistTotal[type]][type][8] = OrderProfit(); gHistProps[gHistTotal[type]][type][9] = OrderSwap(); gHistProps[gHistTotal[type]][type][10] = OrderCommission(); gHistProps[gHistTotal[type]][type][11] = OrderExpiration(); gHistPrf[type] += OrderProfit()+OrderSwap()+OrderCommission(); gHistLts[type] += OrderLots(); gHistTotal[type]++;// count for ordertypes gHistTotal[6]++;// all orders count ii++; } } return(ii); } //+------------------------------------------------------------------+ //| Function : int OrdsRefresh(Magik,Comment,Symbol) | //| Copyright © 2012, XrustSolution. mail:xrustx@gmail.com | //| https://www.youtube.com/user/opmlv http://forexrust.info | //+------------------------------------------------------------------+ //| Description: | //+------------------------------------------------------------------+ int OrdsRefresh(int mn=-1,string comm="",string sy=""){int i,ii=0,type;bool iMn=true,iComm=true; if(mn<0){iMn=false;} if(StringLen(comm)<1){iComm=false;} ArrayResize(gOrdsTotal,7); ArrayInitialize(gOrdsTotal,0); ArrayResize(gOrdsTicks,ORDS_TOTAL); ArrayInitialize(gOrdsTicks,0); ArrayResize(gOrdsProps,ORDS_TOTAL); ArrayInitialize(gOrdsProps,0); ArrayResize(gOrdsPrf,ORDS_TOTAL); ArrayInitialize(gOrdsPrf,0); ArrayResize(gOrdsLts,ORDS_TOTAL); ArrayInitialize(gOrdsLts,0); for(i = OrdersTotal()-1; i>=0; i--){ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){ if(OrderType()>5){continue;} if(OrderCloseTime()!=0){continue;} if(sy!=""){if(OrderSymbol()!=sy){continue;}} if(iMn){if(OrderMagicNumber()!=mn){continue;}} if(iComm){if(StringFind(OrderComment(),comm)<0){continue;}} type = OrderType(); gOrdsTicks[gOrdsTotal[type]][type] = OrderTicket(); gOrdsProps[gOrdsTotal[type]][type][0] = OrderTicket(); gOrdsProps[gOrdsTotal[type]][type][1] = OrderLots(); gOrdsProps[gOrdsTotal[type]][type][2] = OrderOpenTime(); gOrdsProps[gOrdsTotal[type]][type][3] = OrderOpenPrice(); gOrdsProps[gOrdsTotal[type]][type][4] = OrderStopLoss(); gOrdsProps[gOrdsTotal[type]][type][5] = OrderTakeProfit(); gOrdsProps[gOrdsTotal[type]][type][6] = OrderClosePrice(); gOrdsProps[gOrdsTotal[type]][type][7] = OrderCloseTime(); gOrdsProps[gOrdsTotal[type]][type][8] = OrderProfit(); gOrdsProps[gOrdsTotal[type]][type][9] = OrderSwap(); gOrdsProps[gOrdsTotal[type]][type][10] = OrderCommission(); gOrdsProps[gOrdsTotal[type]][type][11] = OrderExpiration(); gOrdsPrf[type] += OrderProfit()+OrderSwap()+OrderCommission(); gOrdsLts[type] += OrderLots(); gOrdsTotal[type]++;// count for ordertypes gOrdsTotal[6]++;// all orders count ii++; } } return(ii); } //+------------------------------------------------------------------+ Алексей Тарабанов 2013.02.22 21:25 #117 Rustamさん、ありがとうございます。 Рустам 2013.02.22 21:27 #118 ええ、あなたもハッピーホリデー! 皆に100グラムを! :) Ilya Malev 2013.02.22 21:33 #119 TarasBY:私のコードでは、この関数はOrderSelect()の後に呼び出されるので、このエラーは発生しません。そして、コードのチェックは、実行可能なすべてのEA機能の共通構造を持たずにコードが書かれていた時代から残されています。また、ほとんどの関数にエラー処理関数が含まれており、その回避にも気を配っています。また、"Order selected earlier, or not? "という探していた答えのような、エラーを発生させる機能も多数あります。追伸:ところで、コンパイル済みのライブラリからOrderSelect()関数を使用する際の特殊性(誰かの役に立つかもしれません)を思い出しました:注文を選択した(方法 - 主としてではない)、OrderTicket() - 選択した注文の番号を返します。しかし、この選択されたオーダーのプロパティを、コンパイルされたライブラリにある関数から取得しようとすると、何も得られないのです。その順番をもう一度(再)選択しなければならないのです。実は、注文処理のループ内でもそのループ外でも使える汎用関数の1つ、つまり注文が選択される前にエラーが発生する状況に遭遇したのです。注文が選択された後でも、それ以前でも、注文があるときでも、ないときでも使えるユニバーサルサービス機能を作るなら、このエラーが出ないように、引用したような仕組みを使うべきでしょう。順序選択が ライブラリモジュールに渡されずに戻ってくることは、このスレッドの前の方で既に書きました。 Дмитрий 2013.02.22 21:36 #120 Ant_TL:実は、注文処理サイクルの内側でも外側でも使える汎用関数の1つ、つまり注文が選択される前にエラーが発生する状況に遭遇したのです。もし、注文が選択された後でも、その前でも、注文があるときでも、ないときでも使えるようなユニバーサルサービス機能を作りたいのであれば、前ページで述べたような仕組みで、このエラーを回避する必要があります。順序選択がライブラリモジュールに渡されずに戻ってくることは、このスレッドの前の方で既に書きました。トレード操作 ごとにセレクトオーダーがあることに慣れれば、特に問題はないでしょう。そして、そう、正しく書かれているのは、1つの注文しか選択できないことです。それ以外はすべて配列で解決します。 1...567891011121314151617181920 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
それが私の言いたいことです。私の機能には汎用性がなく、それぞれが自分の業務に徹することができるのです。買うと売るでも別々です。だから、注文番号が変わろうが、ストップ高になろうが、チケットとマジシャンは残ります。
まあ、スロソルに夢中になったんでしょう:)
まあ、パクリに夢中になったんだろうけど:)
まだ、ミスはありません。その点では、私は暴君です:)
いや、バターの中のチーズのようにではないですが、中佐としてそれなりに活躍しました。気を悪くされたらごめんなさい :(
いいえ、気を悪くする必要はありません。私が間違ったことを言ったとしても、あなたは応じる必要はありませんが、心から。:)
あなたは私を誤解しています。なぜか半数の人がそうなんです。関数A()で選択されたその注文を関数B()で処理する必要はないのです。関数B()は他の 命令と連動し、どの命令であっても、関数A()とは関係なく、関数B()は独自のロジックを持つ。注文数、総利益、コメント、TP・SLなどをカウントできます。関数B()から関数A()に戻り、関数B()がオーダーをどう処理しても、関数B()が呼ばれる前に関数A()が選択したオーダーはもう選択されず、関数B()が処理した別のランダムオーダーが選択されて、おそらくループ内のオーダーも検索しているので、そこから関数B()が呼ばれた時点では関数A()の動作論理は破られていないようにしなければならないという課題である。
一度に選択できる注文は1 つだけであることを、あなたはずっと忘れています。終了 = オーダーのリストをセービングプール(あなたの配列)に格納します。1つのグローバル変数 lastorder では不十分です。
私のコードでは、この関数はOrderSelect()の後に呼び出されるので、このエラーは発生しません。そして、コードのチェックは、実行可能なすべてのEA機能の共通構造を持たずにコードが書かれていた時代から残されています。
また、ほとんどの関数にエラー処理関数が含まれており、その回避にも気を配っています。また、"Order selected earlier, or not? "という探していた答えのような、エラーを発生させる機能も多数あります。
追伸:ところで、コンパイル済みのライブラリからOrderSelect()関数を使用する際の特殊性(誰かの役に立つかもしれません)を思い出しました:注文を選択した(方法 - 主としてではない)、OrderTicket() - 選択した注文の番号を返します。しかし、この選択されたオーダーのプロパティを、コンパイルされたライブラリにある関数から取得しようとすると、何も得られないのです。その順番をもう一度(再)選択しなければならないのです。
実は、注文処理のループ内でもそのループ外でも使える汎用関数の1つ、つまり注文が選択される前にエラーが発生する状況に遭遇したのです。注文が選択された後でも、それ以前でも、注文があるときでも、ないときでも使えるユニバーサルサービス機能を作るなら、このエラーが出ないように、引用したような仕組みを使うべきでしょう。
順序選択が ライブラリモジュールに渡されずに戻ってくることは、このスレッドの前の方で既に書きました。
実は、注文処理サイクルの内側でも外側でも使える汎用関数の1つ、つまり注文が選択される前にエラーが発生する状況に遭遇したのです。もし、注文が選択された後でも、その前でも、注文があるときでも、ないときでも使えるようなユニバーサルサービス機能を作りたいのであれば、前ページで述べたような仕組みで、このエラーを回避する必要があります。
順序選択がライブラリモジュールに渡されずに戻ってくることは、このスレッドの前の方で既に書きました。
トレード操作 ごとにセレクトオーダーがあることに慣れれば、特に問題はないでしょう。そして、そう、正しく書かれているのは、1つの注文しか選択できないことです。それ以外はすべて配列で解決します。