初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 1377

 
Fast235 #:

と、参加者の一人が言うように、工場に。

知覚不能により

オブジェクトに一意の番号を割り当てる必要があり、この番号はパラメータから収集する必要があります。

- 対象物の開封時期

- 対象期間

- オブジェクトの時間枠

例えば、こんな感じです。

int Num= TimeOpen+Period*0.0001

まあこの数字が排他的になるかどうかは分からないし、int以下のデータ型は合わないが、できればint

 
Mikhail Toptunov #:

オブジェクトには一意の番号を割り当てる必要があり、この番号はパラメータから収集する必要があります。

- 対象物の開封時期

- 対象期間

- オブジェクトのタイムフレーム

例えば、こんな感じです。

まあこの数値が排他的になるとは思えませんし、int以下のデータ型は合いませんが、望ましいのはintです

一意の番号が自動的に割り当てられます - tr_Deal73772984

ぎもんがあらない

 

次の簡単なコードをご覧ください。

   for(uint i=0; i<total; i++)
     {
      //--- try to get deals ticket
      if((ticket=HistoryDealGetTicket(i))>0)
        {
         symbol=HistoryDealGetString(ticket,DEAL_SYMBOL);
         if(symbol!=Symbol())
            continue;
         //--- get deals properties
         price =HistoryDealGetDouble(ticket,DEAL_PRICE);
         time  =(datetime)HistoryDealGetInteger(ticket,DEAL_TIME);
         type  =HistoryDealGetInteger(ticket,DEAL_TYPE);
         entry =HistoryDealGetInteger(ticket,DEAL_ENTRY);
         profit=HistoryDealGetDouble(ticket,DEAL_PROFIT);
         id    =HistoryDealGetInteger(ticket, DEAL_POSITION_ID);
         //---
         text  =DoubleToString(profit,2);
         //---
         //+------------------------------------------------------------------+
         //|                                                                  |
         //+------------------------------------------------------------------+
         if(price && time && symbol==Symbol())
           {
            //--- create price object
            name=prefix+"Deal"+string(ticket);
            name2=prefix+"Price"+string(ticket);
            if(entry==DEAL_ENTRY_IN)
              {
               ObjectCreate(0,name,OBJ_ARROW_LEFT_PRICE,0,time,price,0,0);
                 {
                  timeOpen=time;
                  priceOpen=price;
                 }
              }
            if(entry==DEAL_ENTRY_OUT)
              {
               // if(ShowRightTabTab)
               //---создадим метку на закрытии
               ObjectCreate(0,name,OBJ_ARROW_RIGHT_PRICE,0,time,price,0,0);
               //--- нарисуем линию  сделки
               ObjectCreate(0,name+"_trend",OBJ_TREND,0,timeOpen,priceOpen,time,price);
               //--- добавим на график результат сделки
               ObjectCreate(0,name2,OBJ_TEXT,0,time,price+offset*_Point);
               if(profit>0.0)
                  clr=inpColorTP;
               else
                  clr=inpColorSL;
              }
 

こんにちは。

フィボナッチレベルを 表示/非表示にするにはどうすればよいですか?一般的には、いくつかのレベルを削除する必要があります。OBJPROP_LEVELSプロパティを使用すると、最初のN個のレベルが使用可能になるだけです。各レベルのvisibilityプロパティを設定する方法、または完全に削除する方法は?

 
leonerd #:

こんにちは。

フィボナッチレベルを 表示/非表示にするにはどうすればよいですか?一般的には、いくつかのレベルを削除する必要があります。OBJPROP_LEVELSプロパティを使用すると、最初のN個のレベルが使用可能になるだけです。各レベルのvisibilityプロパティを設定する、または完全に削除するにはどうすればよいですか?

こんな感じです。

double fiboLev[] = {0.0, 0.236, 0.382, 0.5, 0.618, 0.764, 0.882, 1.0, 1.236, 1.382, 1.618, 2.0, 2.236, 2.618, 3.236, 3.618, 4.236};
/************************fiboCreate function*************************/
void fiboCreate(datetime t0, double p0, datetime t1, double p1)
 {
  long chartID = ChartID();
  if(ObjectFind(chartID, fiboName) < 0)
   {
    ObjectCreate(chartID, fiboName, OBJ_FIBO, 0, t1, p1, t0, p0);
    ObjectSetInteger(chartID, fiboName, OBJPROP_WIDTH, 2);
    ObjectSetInteger(chartID, fiboName, OBJPROP_COLOR, clrFibo);
    ObjectSetInteger(chartID, fiboName, OBJPROP_LEVELS, 23);
    ObjectSetInteger(chartID, fiboName, OBJPROP_LEVELCOLOR, clrFibo);
    for(int i = 0; i < 17; i++)
     {
      ObjectSetDouble(chartID, fiboName, OBJPROP_LEVELVALUE, i, fiboLev[i]);
      ObjectSetString(chartID, fiboName, OBJPROP_LEVELTEXT, i, "%$ ("+DoubleToString(fiboLev[i]*100, 1)+")");
     }
   }
  else
    if(ObjectFind(chartID, fiboName) == 0)
     {
      ObjectSetInteger(chartID, fiboName, OBJPROP_TIME, 0, t0);
      ObjectSetDouble(chartID, fiboName, OBJPROP_PRICE, 0, p0);
      ObjectSetInteger(chartID, fiboName, OBJPROP_TIME, 1, t1);
      ObjectSetDouble(chartID, fiboName, OBJPROP_PRICE, 1, p1);
     }
  ChartRedraw();
 }/******************************************************************/

EAから抜粋したもので、ここでは定義されていない変数もあります。このコードはコンパイルできません。

 

こんにちは、標準的な方法を使用して構造体からオフセットを持つ配列要素を 削除する方法はありますか?


struct OrderFib
  {
   double            id;
   double            Price[Umax];            
   int               type;
   int               PeriodUr50;  // № Периода
  } trade_buff[];

1) trade_buff[0]...
   trade_buff[1]... deleted
   trade_buff[2]...

2) trade_buff[0]...
   trade_buff[1]... 
 

このようにすれば、もっとプロフェッショナルにできるんじゃないですか?

//+----------Удаляем старый сигнал-----------------------------------+
void filterDeal_1(int tf)
  {
   for(int i= 0; i<CountTrade; i++)
      if(trade_buff[i].tf == tf)
        {
         ArrayRemove(trade_buff,i,1);
         CountTrade--;
         i= 0;
        }
  }
 
Mikhail Toptunov #:

これを、もっとプロフェッショナルな方法でできないか。

配列の要素を削除するには、配列の最後から始めれば、インデックスを変更する必要はありません。勝手に順番が回ってくる。

for(int i=CountTrade-1; i>=0; i--)
   {
   if(trade_buff[i].tf == tf)
      {
      ArrayRemove(trade_buff,i,1);
      }
   }
 
Aleksei Stepanenko #:

配列の要素を削除するには、配列の最後から始めれば、インデックスを変更する必要はありません。勝手に順番が回ってくる。

Right, Cool, Thanks!

 
Mikhail Toptunov #:

オブジェクトには一意の番号を割り当てる必要があり、この番号はパラメータから収集する必要があります。

- 対象物の開封時期

- 対象期間

- オブジェクトのタイムフレーム

例えば、こんな感じです。

まあ、この数値が排他的になるとは思えないし、int以下のデータ型は合わないが、できればintがいい。

後で復号化する場合は、番号ではなくオブジェクト名を暗号化した方が良い。つまり、数字から名前、数字から文字列、文字列からintに変換しているのです。フィールドをセパレータで区切るか、各フィールドの文字数を考慮するか、どちらかしかないでしょう。

理由: