MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 979

 
Rustam Bikbulatov:
こんにちは、アドバイスをお願いします。最後のテキストが表示されないのはなぜですか?ここで何が問題なのか?どうすれば直るのか、教えてください!

常に1つのオブジェクトの名前を取るだけなら、なぜループが必要なのでしょうか?

for(int no1=0; no1<ObjectsTotal(OBJ_TEXT); no1++)
  {
   if(ObjectName(0)=="Profit1"+iBarShift(NULL,1440,0))
     {
      double name;
      name = ObjectDescription(0);;
      Comment(name);
     }
  }
 

Iurii Tokman:

no1<=ObjectsTotal(OBJ_TEXT);

正確に言うと、これはできません。配列の境界から外れて しまうからです。10個のオブジェクトがある場合、最後のオブジェクトのインデックスは9となる。ゼロから数えるからです。

 
Artyom Trishkin:

一度に1つのオブジェクトの名前を取るだけなら、なぜループなのか?

このオブジェクトのペネトレーションテキストを決定する方法を具体的に教えてください。

 
Rustam Bikbulatov:

このオブジェクトのペネトレーションテキストを決定する方法を具体的に教えてください。

自分が何をしたいのか、なかなかわからない。

 
void Profit()
  {
   ObjectCreate("Profit"+iBarShift(NULL,1440,0),OBJ_TEXT,1,TimeCurrent(),0.6);
   ObjectSetText("Profit"+iBarShift(NULL,1440,0),DoubleToStr(AccountProfit(),2),11,"Arial",clrWhite);
   ObjectSetInteger(0,"Profit"+iBarShift(NULL,1440,0),OBJPROP_ANCHOR,ANCHOR_RIGHT_LOWER);
   return;
  }
void Profit1()
  {
   double  Prof = ObjectDescription("Profit1"+iBarShift(NULL,1440,0));
   double  P = -Prof;
   ObjectCreate("Profit1"+iBarShift(NULL,1440,0),OBJ_TEXT,1,TimeCurrent(),0.1);
   ObjectSetText("Profit1"+iBarShift(NULL,1440,0),DoubleToStr(MathMax(-AccountProfit(),-P),1),11,"Arial",clrWhite);
   ObjectSetInteger(0,"Profit1"+iBarShift(NULL,1440,0),OBJPROP_ANCHOR,ANCHOR_RIGHT_LOWER);
   return;
  }
void Profit2()
  {
   ObjectCreate("Profit2"+iBarShift(NULL,1440,0),OBJ_TEXT,1,TimeCurrent(),-0.4);
   ObjectSetText("Profit2"+iBarShift(NULL,1440,0),iBarShift(NULL,1440,0)-1000,11,"Arial",clrWhite);
   ObjectSetInteger(0,"Profit2"+iBarShift(NULL,1440,0),OBJPROP_ANCHOR,ANCHOR_RIGHT_LOWER);
   return;
  }
void Profit3()
  {
   for(int no1=0; no1<=ObjectsTotal(OBJ_TEXT); no1++)
     {
      if(ObjectFind(1,"Profit2"+iBarShift(NULL,1440,0))!=0)
        {

         string   obj_name;
         obj_name = ObjectName(3);
         string   name;
         name = ObjectDescription(obj_name);
         Comment(obj_name);
        }
     }

   ObjectCreate("Profit3"+iBarShift(NULL,1440,0),OBJ_TEXT,1,TimeCurrent(),-0.9);
   ObjectSetText("Profit3"+iBarShift(NULL,1440,0),DoubleToStr(name,1),11,"Arial",clrWhite);
   ObjectSetInteger(0,"Profit3"+iBarShift(NULL,1440,0),OBJPROP_ANCHOR,ANCHOR_RIGHT_LOWER);
   return;
  }

プロビット - 日中のテスト中の総利益を表示します。

Provit1 - その日の最大ドローダウンを表示します。

Provit2 - 1から始まる通常の数値列。

Provit3 - ターゲット!Provit1 を合計し、Provit2 で割る。テストの合計時間に対する1日の平均ドローダウンを知りたい。 Provit3の理解に役立つ。

 

同僚 - このクローズエラーの可能性と対処法について教えてください。以下は、利益を超えたら-すべての一方向ポジションを決済するコードです。 ありがとうございます。

        
             
 // ЗАКРЫВАЕМ ВИРТУАЛЬНЫЕ ТР БАЙ позы            
     if(takeprofit < ProfitB)    
      {   
        Print(" ЗАКРЫТИЕ BUY POSITIONS. общий ProfitB = ", ProfitB," мин общий takeprofit buys positions = ", takeprofit);   
        for (i=OrdersTotal()-1; i>=0; i--)         
          if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
          if (OrderSymbol()==Symbol() &&  Magic_Прямой==OrderMagicNumber()) 
            {             
             if(OrderType()==OP_BUY)    
                             //if(OrderOpenPrice()+takeprofit*Point<=MarketInfo(Symbol(),MODE_BID) || 
                             //   OrderOpenPrice()-stoploss*Point>=MarketInfo(Symbol(),MODE_BID))   
                     
               if (OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_BID),NormalizeDouble(MarketInfo(Symbol(),MODE_SPREAD)*2,Digits()),clrGray))  
                   Print(" закрытие бай, тикет = ", OrderTicket());
               else  Print(" ошибка закрытия бай, Error = ", GetLastError());          
            }
       }     
      
       if(takeprofit < ProfitS)     
        { 
         Print(" ЗАКРЫТИЕ СЕЛЛов. общий ProfitS = ", ProfitS," мин общий takeprofit СЕЛЛов = ", takeprofit);   
 
         for (i=OrdersTotal()-1; i>=0; i--)      
          if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
          if (OrderSymbol()==Symbol() &&  Magic_Прямой==OrderMagicNumber()) 
            {                       
             if(OrderType()==OP_SELL)    
                             //  if(OrderOpenPrice()-takeprofit*Point>=MarketInfo(Symbol(),MODE_ASK) ||
                             //     OrderOpenPrice()+stoploss  *Point<=MarketInfo(Symbol(),MODE_ASK))                
             
               if (OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_ASK),NormalizeDouble(MarketInfo(Symbol(),MODE_SPREAD)*2,Digits()),clrGray)) 
                   Print(" закрытие SELL,  тикет = ", OrderTicket());
               else   Print(" ошибка закрытия sell, Error = ", GetLastError());     
            }       
         }    
           
 
Roman Shiredchenko:

同僚 - これは何を閉じるエラーとすることができますし、どのように対処する?以下のコードを使用する場合、一方向のポジションが利益を上げている場合は、すべて決済する必要があります。ありがとうございます。

エラー内容は?

理論的にはうまくいくはずですが、スプレッドを考慮してスリッページとして加算するような洗練されたクロージングは見たことがありません。イマイチ、クロージングすることになったら、スリッページは最も注意すべきことではなく、クロージングエラーがより重要で、次にリクオート、そして接続が完全に失われます。


OrderClose(...)を取り去って、KimのClosePosBySelect()https://www.mql5.com/ru/forum/131859/page2#comment_3359664 に置き換える。

を使うことで、どこで壊れているのかがはっきりわかると思います。

 
Igor Makanu:

エラー内容は?

理論的にはうまくいくはずですが、スプレッドを考慮してスリッページとして加算するような洗練されたクロージングは見たことがありません。イマイチ、クロージングすることになったら、スリッページは最も注意すべきことではなく、クロージングエラーがより重要で、次にリクオート、そして接続が完全に失われます。


OrderClose(...)を削除し、代わりにKimのClosePosBySelect()にチケットを渡せば、どこでうまくいかないかが明らかになるはずです。

彼はそこにゼロプライスのクローズを持っています。したがって、MarketInfo-function が返すものを制御する必要があるが、制御はできない。しかし、4つのいつものように、一部の人々は、書き込みに使用されている - 何かを受け取った、何 - チェックしなかったが、引数を送信します。

 
Artyom Trishkin:

彼はそこにゼロプライスのクローズを持っています。したがって、MarketInfo-function が返すものを制御する必要があるが、制御はできない。しかし、いつものように4つの一部の人々が書くために使用されている - 何かを受け取った、何 - チェックしませんでしたが、引数を送信します。

私はそれを見て、私は彼が自分ですべての設定を解除することができるだろう、それは私が順序を 経由して選択した順序を閉じるためにチェックClosePosBySelect()を使用することを示唆した理由です - 彼はそれができる、少なくとも私は彼がコンストラクタでコードを組み立てて見たことがある )))

SZY: 1つのオーダーを2回クローズしているのではないかという別の疑惑があるのですが、Kimのf関数がログにプリントさ れるため、2番目の条件でクローズする別のループはないようです。

 
Igor Makanu:

私はそれを見た、私はそれだけですべてのプライムを解除することができるだろう、それがOrderSelect()を介してハイライトされた注文の実績の閉鎖を使用して提案した理由です。

確かに、イゴールの関数はユーザーのためにすべてをやってくれる(そして、一部のユーザーはそれでミスを犯すことさえ管理している)。しかし、この場合、彼は自分で何かをすることを学ぶことはない。もちろん、彼らの自由ですが。