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

 
lil_lil:
ありがとうございます。

または、iHighest()- 最新ビルドにはすでに搭載されています。

 
Ihor Herasko:

ネッティングのような勘定科目では、ポジションとトレードは異なる概念です。これで、ポジションの選択が表示されましたね。

そのポジションに含まれるトレードはどのように選択 するのでしょうか?

long ID=PositionGetInteger(POSITION_IDENTIFIER);

 
Sile Si:

また、このポジションに含まれるトレードの選択 方法について



bool  HistoryDealSelect(
   ulong  ticket     // тикет сделки
   );
Документация по MQL5: Торговые функции / HistoryDealSelect
Документация по MQL5: Торговые функции / HistoryDealSelect
  • www.mql5.com
Выбирает в истории сделку для дальнейших обращений к ней  через соответствующие функции. Возвращает true при успешном завершении функции. Возвращает false при неудачном завершении функции. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError(). Не следует путать между собой ордера, сделки и позиции. Каждая сделка...
 
Alexey Viktorov:


ありがとうございます。いくつかの案件があるので、HistoryDealGetTicket() を使ってみることにしました。

すべてコメントアウトしたのですが、どこが間違っているのか教えてください。どこが間違ってるんだろう?

double Aver_Pr_nett()
  {
   double total_price_multiply_volume_sell   = 0.0;
   double total_volume_sell                  = 0.0;
   double net_price_sell_=0.0;
   string symb=_Symbol;
   int    total       =0;  // 
   for(int i=0; i<PositionsTotal(); i++)
     {
      ulong pt=PositionGetTicket(i);//  тикет позиции
      long ID=PositionGetInteger(POSITION_IDENTIFIER);//id позиции
      if(PositionGetString(POSITION_SYMBOL)==symb && //символ позиции
      HistorySelect(PositionGetInteger(POSITION_TIME),TimeCurrent()+60))//промежуток времени для поиска сделок
        {
         total=HistoryDealsTotal();//количество сделок
         
         for(int i=0; i<total; i++)// цикл по всем сделкам
           {
            ulong dt = HistoryDealGetTicket(i);//тикет сделки, возможно нужно использовать HistoryDealSelect()
            long did = HistoryDealGetInteger(dt, DEAL_POSITION_ID);//id сделки
            ENUM_DEAL_ENTRY in_out=HistoryDealGetInteger(dt,DEAL_ENTRY);//
            if(did==pt &&          //id сделки равно тикету позиции
            in_out==DEAL_ENTRY_IN) //сделка открыла позицию либо добавила объём
              {
               if(HistoryDealGetString(dt,DEAL_SYMBOL)==symb)//символ сделки равен текущему графику
                 {//дальше нахожу среднюю цену сделок
                  total_price_multiply_volume_sell+=HistoryDealGetDouble(dt,DEAL_PRICE)*HistoryDealGetDouble(dt,DEAL_VOLUME);
                  total_volume_sell+=HistoryDealGetDouble(dt,DEAL_VOLUME);
                  if(total_price_multiply_volume_sell!=0 && total_volume_sell!=0)
                    {
                    net_price_sell_=total_price_multiply_volume_sell/total_volume_sell;
                    };
                 }
              }
           }
        }
     }
//---
   return(net_price_sell_);
  }

 
Sile Si:

ありがとうございます。いくつかの案件があるので、HistoryDealGetTicket()を使用 することにしました。

すべてコメントアウトしたのですが、どこが間違っているのか教えてください。どこが間違ってるんだろう?


大間違いでした。慌てて間違った参考文献をあげてしまいました。一つのことを考え、間違ったものを選んでしまった。

正しいリンクはこちらです。

Документация по MQL5: Торговые функции / HistorySelectByPosition
Документация по MQL5: Торговые функции / HistorySelectByPosition
  • www.mql5.com
Не следует путать между собой ордера из торговой истории и действующие отложенные ордера, которые отображаются на вкладке "Торговля" в панели "Инструменты". Список ордеров, которые были отменены или привели к проведению торговой операции, можно посмотреть  в закладке "История" на панели "Инструменты" клиентского терминала. Функция...
 
Alexey Viktorov:

大間違いでした。慌てて間違ったリンクを貼ってしまいました。一つのことを考えてたのに、間違ったものを選んでしまった。

正しいリンクはこちらです。

ありがとうございます(苦笑)。

 
iAO,iDemなどのインジケーターに2点で線を引き、点Xでの線の値を得るにはどうしたらいいですか?
 
Сергей:
iAO,iDemなどのインジケータに2点ずつ線を引き、X点での線の値を取得するには?

各インジケータは、メインウィンドウまたはサブウィンドウに描画されます。そこでステップ1:インジケータが描画されるサブウィンドウの番号を調べます。チャートで「オペレーション」の方向性を見る。

ステップ2:サブウィンドウの番号がある場合、線を引くのは簡単です。OBJ_TREND ヘルプ、および"TrendCreate"関数パラメータを参照してください。

//+------------------------------------------------------------------+ 
//| Создает линию тренда по заданным координатам                     | 
//+------------------------------------------------------------------+ 
bool TrendCreate(const long            chart_ID=0,        // ID графика 
                 const string          name="TrendLine",  // имя линии 
                 const int             sub_window=0,      // номер подокна 
                 datetime              time1=0,           // время первой точки 
                 double                price1=0,          // цена первой точки 
                 datetime              time2=0,           // время второй точки 
                 double                price2=0,          // цена второй точки 
                 const color           clr=clrRed,        // цвет линии 
                 const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль линии 
                 const int             width=1,           // толщина линии 
                 const bool            back=false,        // на заднем плане 
                 const bool            selection=true,    // выделить для перемещений 
                 const bool            ray_left=false,    // продолжение линии влево 
                 const bool            ray_right=false,   // продолжение линии вправо 
                 const bool            hidden=true,       // скрыт в списке объектов 
                 const long            z_order=0)         // приоритет на нажатие мышью 
  { 
 
Artyom Trishkin:

または、iHighest() - 最新ビルドにはすでに搭載されています。

そういえば、ヘルプにもやっとこういう新旧の機能が追加されたんですね。

 

siに付属するEAがvtbrを修正するのは間違いない。T/Pポジションをそのインストゥルメント "si "のクォートに配置する。

リョー

EAをvtbrにアタッチすると、siは変更されず、そのインストゥルメントでのみ動作する。

ペッブリー

これについては何か説明がありますか?

これ以外のコードには一切手を加えていません。

   if(TakeProfit>0)
     {
     if(!RefreshRates())
            return;
      int total=PositionsTotal();
      for(int i=total-1;i>=0;i--)
        {
         if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
           {
            if(m_position.Symbol()==Symbol())
              {
               //if(m_position.PositionType()==POSITION_TYPE_BUY)
               if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
                 {
                  if(m_symbol.NormalizePrice(Aver_Pr_sell_nett()+ExtTakeProfit)!=m_position.TakeProfit())
                    {
                     m_trade.PositionModify(m_position.Ticket(),
                                            m_position.StopLoss(),
                                            m_symbol.NormalizePrice(Aver_Pr_sell_nett()+ExtTakeProfit)
                                            );
                     Sleep(300);

                    }
                 }
               //==//
               //if(m_position.PositionType()==POSITION_TYPE_SELL)
               else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
                 {
                  if(m_symbol.NormalizePrice(Aver_Pr_sell_nett()-ExtTakeProfit)!=m_position.TakeProfit())
                    {
                       {
                        m_trade.PositionModify(m_position.Ticket(),
                                               m_position.StopLoss(),
                                               m_symbol.NormalizePrice(Aver_Pr_sell_nett()-ExtTakeProfit)
                                               );
                        Sleep(300);
                       }
                    }
                 }
              }
           }
        }
     }
理由: