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

 
Vladimir Karputov:

このためのインジケータは、入力色パラメータを持たなければならない。つまり、カスタムインジケータ であることが望ましい。

THANK YOU!でもソースコードにアクセスできないと、実現不可能なのでは?

 
Tango_X:

ありがとうございます! でも、ソースコードにアクセスできないと、実装できないのでは?

はい、オープンソースか既成の実装が必要です。

 
Vladimir Karputov:

はい、オープンソースのコードか実装を準備しておく必要があります。

テスターでカラーclrNONEを設定しても、色が表示されてしまいますテスターではclrNONEは動作しないのですねリアルに確認できないんですよねー、週末だし...。

clrNONEの代わりに任意の色を設定すると、この色が表示されますが、空値の=は機能しません...不思議です...。
 
Aleksey Mavrin:

答え:マクロの再読み込みも繰り返し行う)

しかし、文字列には + 演算子を使い、すべてを文字列に変換したほうがよい。そうすれば、多くのパラメータを持つ関数(およびマクロ)バージョンは必要ない

ありがとうございます。マクロがリロードできるのは知りませんでした。

 
pivomoe:

ありがとうございます。マクロがリロードできるのは知りませんでした。

typo - reload, not reload).

 

このヘルプセクションの最後にある例をソートしたhttps://www.mql5.com/ru/docs/constants/structures/mqltraderequest

Metacquot サーバーでは、すべて OK です。

別のサーバーで、取引要求のエラーコードを分析した結果、MqlTradeResultフィールドへの入力に問題があることがわかりました。

request.type_filling = ORDER_FILLING_IOC;

フォーラムを検索しても、MqlTradeResultフィールドのサーバー 設定をプログラムで決定する方法という明確な解決策は見つかりませんでした。

ENUM_ORDER_TYPE_FILLING       type_filling;     // Тип ордера по исполнению 


UPD: 動作するソリューションが見つかりましたhttps://www.mql5.com/ru/forum/168912/page2#comment_4062864

fxsaber さん、ありがとうございます。

 
オートビルドのフィボレベルの設定方法を教えてください。
 
VVT:
オートビルドでフィボレベルを設定する方法を教えてください。

フィボナッチRR コードでの例-。

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   long chart_id=ChartID();
   datetime time1=ChartTimeOnDropped();
   double price1=ChartPriceOnDropped();
   if(ObjectFind(chart_id,InpFiboName)<0)
      FiboLevelsCreate(chart_id,InpFiboName,0,time1,price1,time1+InpAddSecond,price1-InpStopLoss*Point(),InpColor);
   else
     {
      ObjectDelete(chart_id,InpFiboName);
      ChartRedraw(chart_id);
      FiboLevelsCreate(chart_id,InpFiboName,0,time1,price1,time1+InpAddSecond,price1-InpStopLoss*Point(),InpLevelsColor);
     }
//---
   int               levels   = 6;                                                                    // number of level lines
   double            values[6]= {1.0,0.0,2.0,3.0,4.0,5.0};                                            // values of level lines
   color             colors[6];                                                                       // color of level lines
   for(int i=0; i<6; i++)
      colors[i]=InpLevelsColor;
   ENUM_LINE_STYLE   styles[6];                                                                       // style of level lines
   for(int i=0; i<6; i++)
      styles[i]=InpLevelsStyles;
   int               widths[6]= {2.0,2.0,2.0,2.0,2.0,2.0};                                            // width of level lines
   string            texts[6] = {"BREAK EVEN","STOP LOSS","TP1 1.1","TP2 2.1","TP3 3.1","TP4 4.1"};   // text of level lines
//---
   FiboLevelsSet(levels,values,colors,styles,widths,texts,chart_id,InpFiboName);
  }


は、行数、行値、行色、行スタイル、行幅、行テキストを設定することができます。

 
int OnInit()
  {
//---
   ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_CREATE, true);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  }
//+------------------------------------------------------------------+

/***********************OnChartEvent function************************/
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
  {
   if(id == CHARTEVENT_OBJECT_CREATE)
     {
      I++;
      string result[];      //  массив для получения строк
      StringSplit(sparam, ' ', result); //  получим из имени созданного объекта подстроки
      ulong timeCreate = ObjectGetInteger(0, sparam, OBJPROP_CREATETIME); //  получим время создания объекта
      string newName = result[0]+" "+result[1]+" "+string(I); //  сформируем новое имя объекта
      ObjectSetString(0, sparam, OBJPROP_NAME, newName);  //  переименуем объект

      //----------------------------------------------------------------------------------------
      double   Level_0= ObjectGetDouble(
                                0,          // идентификатор графика
                                newName,              // имя объекта
                                OBJPROP_PRICE,           // идентификатор свойства
                                0     // модификатор свойства
                             );


      double   Level_1= ObjectGetDouble(
                                0,          // идентификатор графика
                                newName,              // имя объекта
                                OBJPROP_PRICE,           // идентификатор свойства
                                1     // модификатор свойства
                             );
      //------------------------------------------------------------------------------------------------------
      if(Level_0 > Level_1)
        {
         ObjectSetInteger(0,newName,OBJPROP_COLOR,clrDeepSkyBlue);
        }
      else
        {
         ObjectSetInteger(0,newName,OBJPROP_COLOR,clrYellow);
        }
     }/******************************************************************/
  }

こんにちは、コードをデバッグする際、ステップバイステップで進むと、線が座標値によって両方の色に塗り替えられるのはなぜか、教えていただけませんか。そして、EAをグラフに投げると、if(Level_0 > Level_1)の条件が真になることはない?
 
Kira27:

デバッグの際、コードを段階的に渡していくと、座標値によって線が2色に塗り替えられるのはなぜか、教えてください。そして、EAをチャート上に投げると、if(Level_0 > Level_1)のライン条件は決して真にならないのですか?

オブジェクトの名前を変更した後、まだそのオブジェクトにアクセスできない可能性が非常に高いです。リネームの後にChartRedrawを入れて みるとよいでしょう。うまくいかない場合は、他の方法でシーケンスを構築する必要があります。

ps; 他の方法として、まずスパラム名で再塗装し、その後名前を変更する。
理由: