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

 
Youri Lazurenko:


フルコードがない場合は、お力になれません。フルコードを添付してください( ファイルを添付する ボタンで添付して ください)。

 
void OnTick()の場合、以下のようになります。
   if(currentTime >= OpenTrade && currentTime < CloseTrade)
   {
      if(SignalBuy1() || SignalBuy2())
      { 
         if(timeBarInside != iTime(NULL, 0, 1))
         {
            OpenOrderBuy();
            PositionModifiBuy();
            CandleColor(ColorCandleBuy);
            timeBarInside = iTime(NULL, 0, 1);
         }
      }
      
      if(SignalSell1() || SignalSell2()) 
      {
         if(timeBarInside != iTime(NULL, 0, 1))
         {
            OpenOrderSell();
            PositionModifiSell();
            CandleColor(ColorCandleSell);
            timeBarInside = iTime(NULL, 0, 1);
         }
      }  
   }
フルコードとはどういう意味ですか?EA全体?かなり面倒だし、他の機能は改造とは関係ない。ポジションを 持ったときにすぐにSLとTPを設定できるのはわかるのですが、そのようにしたいのですが、なぜうまくいかないのか、すでに疑問です。mql4では指2本分くらいの出来栄えなのに...ここでは面倒くさいです。
 

そして、トレンドラインの 描画に戻る。コードが必要な場合

bool CreateLine(string name, datetime time1, double price1, datetime time2, double price2, color clr)
{
   ObjectDelete(0, name);  
      
   if(ObjectCreate(0, name, OBJ_TREND, 0, time1, price1, time2, price2))
   {
      ObjectSetInteger(0, name, OBJPROP_COLOR, clr); 
      ObjectSetInteger(0, name, OBJPROP_STYLE, TrendStyle); 
      ObjectSetInteger(0, name, OBJPROP_WIDTH, TrendWidth); 
      
      ChartRedraw(); 
      Sleep(10);
      
      return(true);
   }
   else 
   {
      Print("Ошибка в создании линии"); 
      return (false);
   }
}
ファイル:
1.png  82 kb
2.png  36 kb
 
Youri Lazurenko:

そして、トレンドラインの 描画に戻る。コードが必要な場合

ドキュメントを読む!!!

OBJ_TREND

備考

トレンドラインを右や左に伸ばすモードを指定することができます(それぞれOBJPROP_RAY_RIGHTとOBJPROP_RAY_LEFTプロパティです)。

デフォルトでは、これらのプロパティはfalseに設定されています。

そこで質問ですが、なぜオブジェクトを削除して、再度作成するのでしょうか?チャート上にそのようなオブジェクトがない場合のみ作成するのが簡単ではないでしょうか?また、アンカー座標を変更する必要がある場合でも、一度オブジェクトを削除して再度作成する必要はありません。

 
Youri Lazurenko:


3回目、最終回:フルコードを添付してください。

 
Alexey Viktorov:

ドキュメントを読む!!!

これらのプロパティは、デフォルトでfalseに設定されています。

そして質問:なぜオブジェクトを削除して、再び作成するのですか?チャート上にそのようなオブジェクトがない場合のみ作成するのが簡単ではないでしょうか?また、アンカー座標を変更する必要がある場合でも、一度オブジェクトを削除して再度作成する必要はありません。

ありがとうございます、今見てみます。そして、貴重なコメントをありがとうございました。私はプログラマーではなく、あくまで自分のために、他人の作品を使うことが多い。

 
Vladimir Karputov:

3回目、そして最後のお願い:フルコードを添付してください。

すでに解決済み。Symbolではなく、Tisket経由で改造しています。フルコードがよくわからないのですが、例えばポジションオープン 条件と修正にどんな関係があるのでしょうか?

そして今、このような姿になりました。もしかしたら、誰かに必要とされるかもしれません。

void PositionModifiSell()
{
   int    i;
   ulong  ticket;
   double sl    = 0; 
   double tp    = 0;  
   int    total = PositionsTotal();
   
   for(i = total-1; i >= 0; i--)
   {
      if(m_position.SelectByIndex(i))                            
      {
         if(m_position.Symbol() == Symbol() && m_position.Magic() == Magic)
         {
            if(m_position.PositionType() == POSITION_TYPE_SELL)
            {               
               if(m_position.StopLoss() == 0 && m_position.TakeProfit() == 0)
               {
                  ticket = m_position.Ticket();
                  
                  sl = NormalizeDouble(iHigh(NULL, 0, ExtrimUp()) + VS*_Point, _Digits);
                   
                  if(PriceCurrentDw1() - PriceDwHigh() < LastPriceOpenOrder() - (sp+PW)*_Point)
                  {
                     tp = NormalizeDouble(PriceCurrentDw1() - PriceDwHigh(), _Digits);
                  }
                  else
                     tp = NormalizeDouble(bid - TP*_Point, _Digits);
                  }
                  
                  if(!m_trade.PositionModify(ticket, sl, tp))
                  {
                     Print("Метод PositionModify() потерпел поражение. Код возврата = ", m_trade.ResultRetcode(),
                           ". Описание кода: ", m_trade.ResultRetcodeDescription());
                  }
                  else
                  {
                     Print("Метод PositionModify() исполнен успешно. Код возврата = ", m_trade.ResultRetcode(),
                           " (", m_trade.ResultRetcodeDescription(),")");
                  }
               }
            }
         }
      }
   }
}
 
Youri Lazurenko:


ヘルプを勉強する - チケットでポジションを選択することと、シンボルで選択することの違いは何ですか?失敗しないように、重宝しますよ。

ポジションセレクト

bool  PositionSelect(
   string  symbol     // имя инструмента
   );

備考

ネッティング」ポジション会計(ACCOUNT_MARGIN_MODE_RETAIL_NETTINGおよびACCOUNT_MARGIN_MODE_EXCHANGE)では、1つまたは複数の取引から 発生する、任意の時間にシンボルごとに1つのポジションのみ オープンすることができます。ポジションは、「ツールボックス」パネルの「取引」タブに表示される有効な未決済注文と 混同しないように注意してください。

ポジションが独立して表示されている場合ACCOUNT_MARGIN_MODE_RETAIL_HEDGING)、各シンボルに対して同時に複数のポジションを 開くことができます。この場合、PositionSelectは最小の目盛りを持つポジションを選択 します。

Документация по MQL5: Торговые функции / PositionSelect
Документация по MQL5: Торговые функции / PositionSelect
  • www.mql5.com
PositionSelect - Торговые функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov:

ドキュメントを読む!!!

これらのプロパティは、デフォルトでfalseに設定されています。

そして質問:なぜオブジェクトを削除して、再び作成するのですか?チャート上にそのようなオブジェクトがない場合のみ作成するのが簡単ではないでしょうか?また、アンカー座標を変更する必要がある場合でも、一度オブジェクトを削除して再度作成する必要はありません。

いつもありがとうございます!これで線は線のようになりましたね、うれしいです。しかし、ObjectDelete(0, name)が必要です。そうしないと、一度引いた線は再描画されません。mql4でも同じです、忘れただけです。

 
Youri Lazurenko:

いつもありがとうございます!これで線は線のようになりましたね、うれしいです。ObjectDelete(0, name); だけは必要で、それ以外は一度描いた線は再描画 されない。mql4でも同じです、忘れただけです。

なんとも無茶な話である。描画されたグラフィックオブジェクトは滑らかに動きます。各オブジェクトのヘルプに例が記載されています(水平線OBJ_HLINEの 場合)。

また、すでに描画されているオブジェクトの色、スタイル、匂いなど、あらゆるプロパティを変更することができます。
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_HLINE
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_HLINE
  • www.mql5.com
OBJ_HLINE - Типы объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
理由: