orderopenpriceが開かれた後の最高値を取得するにはどうしたらよいですか? - ページ 5

削除済み  

ということですね。

double LastOpenPrice(int ordertype)    { 
double OpenPrice;                            
datetime lastOpen;    
for ( int pos = OrdersTotal()- 1 ; pos >= 0 ; pos--)       
if ( OrderSelect (pos, SELECT_BY_POS) // Only my orders w/
    &&OrderMagicNumber() == MagicNumberLong || MagicNumberShort // my magic number
    &&OrderSymbol() == Symbol()    // and my pair.
    &&OrderType() == ordertype       
    &&OrderOpenTime() > lastOpen )  {        
            if(OpenPrice = OrderOpenPrice()&&OpenPrice!=0)          
               break;          }
               return (OpenPrice);} //  
"あなたの顔を見たい
 
Hand:

あなたのスルーを見てみたい

いいえ... あなたは学ぶ必要があります ... 変化のために自分でいくつかの努力をする、本を読む (https://book.mql4.com//) ドキュメントを読む (https://docs.mql4.com//) ... ロングとソートの取引に異なるマジックナンバーを持つことは馬鹿げてるし必要ありません.... .
削除済み  

多分この方法でうまくいくと思います。

if( ( (LastOpenPrice(OP_SELL)+0.0030)<MarketInfo("EURUSD",MODE_BID) )&&( LastOpenPrice(OP_SELL)>0)))<--------------- 0+0.0030=0.0030<Bid:TRUE // うまくいくと思う
{ BUY("EURUSD",B_EURUSD_LS_1,B_EURUSD_TP_1,B_EURUSD_SL_1,B_EURUSD_TS_1,"if (

 
Hand:

多分この方法でうまくいくと思います。

if( ( (LastOpenPrice(OP_SELL)+0.0030)<MarketInfo("EURUSD",MODE_BID) )&&( LastOpenPrice(OP_SELL)>0)))<--------------- 0+0.0030=0.0030<Bid:TRUE // うまくいくと思う
{ BUY("EURUSD",B_EURUSD_LS_1,B_EURUSD_TP_1,B_EURUSD_SL_1,B_EURUSD_TS_1,"if (

という問いかけは、本当にその通りです。言い換えれば、あなたの戦略は何ですか?

もし、最後の建値が ないときは取引したくないのであれば、そのように考えることができますか?

if(LastOpenPrice(OP_SELL) <=0){ return? 何をするの? -----売りの場合

if(LastOpenPrice(OP_BUY) <=0){ return?...or do what? ------ 買いの場合

で、あとはコードが進んでいく......。

このようなエラーがあると、コードのあちこちにある「穴」を埋めることができないのではと心配になります。あなたのストラテジーは台無しです。

このようなエラーは、ストラテジーをもっと高いレベルで見直す必要があることを「教えて」くれます。 それに対する答えやアイデアなどはあるのでしょうか?

 
Hand:

ということですね。

あなたのすっぴんを見たいんです。

私は完全にこのことについて言及するのを忘れていたが、これは全体、および物事の永遠のために最も重要な、関連する。それはちょうどあなたが私=あなたの解決策を見るために思考をボンヤリする完全な狂気であり、そのために私はしないでください。

あなたは地球上のどこにいるのですか?あなたの守護天使、シャーマン、個人的な精霊、などなど?

あなたが何を考えようと、私にはどうすることもできませんが、参考までに。

削除済み  

このような場合

以下の関数を チェックしてください(正しいかどうか)私はこの条件を実行する必要があります。

if ( lastOpenedOpenPriceBuy()-lastOpenedOpenPriceSell() )>=0.0060

{ 何かしてください }.

double lastOpenedOpenPriceBuy()
  {
   double ret = 0;
   datetime time=0;
   for(int i=0; i<OrdersTotal(); i++) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()==OP_BUY && OrderOpenTime()>time) {
         time = OrderOpenTime();
         ret = OrderOpenPrice();
      }
   }
   
   return(ret);
  }


double lastOpenedOpenPriceSell()
  {
   double ret = 0;
   datetime time=0;
   for(int i=0; i<OrdersTotal(); i++) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()==OP_SELL && OrderOpenTime()>time) {
         time = OrderOpenTime();
         ret = OrderOpenPrice();
      }
   }
   
   return(ret);
  }



double lastClosedClosePrice()
  {
   double ret = 0;
   datetime time = 0;
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
      OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
      if(OrderType()<2 && OrderCloseTime()>time) {
         time = OrderCloseTime();
         ret = OrderClosePrice();
      }
   }
   
   return(ret);
  }



double beforelastClosedClosePrice()
  {
   double ret = 0;
   double ret2 = 0;
   datetime time = 0;
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
      OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
      if(OrderType()<2 && OrderCloseTime()>time) {
         time = OrderCloseTime();
         ret = ret2;
         ret2 = OrderClosePrice();
      }
   }
   if(ret==0) {
      ret = ret2;
   }
   
   return(ret);
  }
 

最初の1つは私が手伝いますが、残りは他の人に来てもらうといいかもしれません。

<-------------------- can consider to use if(OrdersTotal()>0..then proceed  ---------------->
double lastOpenedOpenPriceBuy()  <----- what a name...confusing, maybe.
  {
   double ret = 0;
   datetime time=0; <---- can consider setting Lowest Limit to -9999, at least -1, rather than 0.  
   for(int i=0; i<OrdersTotal(); i++) { <----- do consider counting down.
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES); <------ This returns some BOOLEAN result.then what? -----(?)
      if(OrderType()==OP_BUY && OrderOpenTime()>time) { <------ This can return runtime OrderSelect ERR bec. of above line (?). ------ (!) 
         time = OrderOpenTime(); 
         ret = OrderOpenPrice();
      }
   }
   
   return(ret);<------ return double as UnNormalized price. you sure about this?
  }

削除済み  

ご注意ください。

このコンディションを入れたとき

if (  ((lastOpenedOpenPriceBuy()-0.0030)>MarketInfo("EURUSD",MODE_BID))  ) 
   {  SELL("EURUSD",S_EURUSD_LS_1,S_EURUSD_TP_1,S_EURUSD_SL_1,S_EURUSD_TS_1,"if (  ( (lastOpenedOpenPriceBuy()-0.0030)>MarketInfo(EURUSD,MODE_BID) )  )") ;}

動作しませんが、もう1つのコンディションを追加すると

if (  (lastOpenedOpenPriceBuy()>0)&&((lastOpenedOpenPriceBuy()-0.0030)>MarketInfo("EURUSD",MODE_BID))  ) 
   {  SELL("EURUSD",S_EURUSD_LS_1,S_EURUSD_TP_1,S_EURUSD_SL_1,S_EURUSD_TS_1,"if (  ( (lastOpenedOpenPriceBuy()-0.0030)>MarketInfo(EURUSD,MODE_BID) )  )") ;}
(lastOpenedOpenPriceBuy()>0)のようになります。
削除済み  
<-------------------- If(OrdersTotal()>0...then proceed ---------------->
double lastOpenedOpenPriceBuy() <-----なんという名前だろう・・・紛らわしい、かも しれない。
{double ret = 0; datetime time=0; <----- 下限を0ではなく、少なくとも-9999に設定することを検討できる。 No order open time could <= 0for(int i=0; i<OrdersTotal(); i++) { <----- ダウンカウントを検討  できる。OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ; <------ This returns some BOOLEAN result.then what? -----(?) If in the loop, the order must exist, when the order exist, OrderSelect will not cause error.ループ内にオーダーが存在する場合、この行は、オーダーが存在する場合、エラーを 引き起こさないif(OrderType()==OP_BUY && OrderOpenTime()>time) { <------ 上の行のせいで、これはランタイム・オーダーセレクトERRを返す可能性がある (?).------ (!) 最後の行と同じ理由 です。
time =OrderOpenTime(); ret =OrderOpenPrice
(); } } return(ret);<------ return double asUnNormalized price. 本当にこれでいいのか?最初の行ですでにret = 0を定義しています。
 

あなたは本当に素晴らしい人です。それらを指摘していただきありがとうございます esp、これ。

OrderSelect(i, SELECT_BY_POS, MODE_TRADES); <------ループ内では、注文が存在しなければならない。注文が存在すれば、OrderSelectはエラーを 発生させない。ループ内でなければ、この行は実行 されません。あなたのこの行は、注文がないときはループから消え、注文があるときは再び現れるというHoudiniの力を持っていると私は思って います。