MT5への願い - ページ 58

 
Urain:

もはや便宜上以外、関係ない。

int scale =(int)ChartGetInteger(chart_id,CHART_SCALE);
int pointer_per_bar=pow(2,scale);// количество пикселей на бар
// остальное можно высчитать из первого видимого бара, и ширины графика в пикселях.

О!ニコライさん、ありがとうございます! 最後までやり遂げられますか?つまり、4つの具体的な機能の実装に。

int  ChartGetX(datetime T);

int  ChartGetY(double P);

datetime ChartGetTime(int X);

double ChartGetPrice(int Y);

もうパズルが完成したみたいで、長い間いじくり回すことになりそうですね。していただけるとありがたいです。

 

Renat:

1つのシンボルで複数のExpert Advisorを取引するのはナンセンスです。

これは、1つのチャートに複数のインジケータを配置する可能性と同じで、妄想ではありません。

MT4では、Expert Advisorから複雑な構造をワンクリックで作成し、そこからポートフォリオを作成する機能が存在すること自体、壮大なことです。

5でこの機能を持つには、取引口座をサブ口座に仮想的に分割することをサポートする取引クラスを作る

また、既存のシンボルをベースに独自のバーチャルシンボルを追加する機会を端末に作成することもできます。

 

MT5の新機能に乗り遅れているのかもしれませんが、バーや価格ではなく、XとYの座標でチャートを表示できるようにしたいのですが、もしそのような可能性が既にあるのならアドバイスをお願いします。そうでなければ、OBJ_CHART グラフィックオブジェクトを使って、特定のシンボルとツールXY_Symbolで簡単に実装できると思います。

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов - Документация по MQL5
 
MetaDriver:

О!ニコライさん、ありがとうございます! 最後までやり遂げられますか?具体的に4つの機能の実装にということです。

すでにパズルが完成しているようで、長い間、いじくり回すことになりそうです。していただけるとありがたいです。

こんなところにも。別の角度が 必要な場合は、ウィンドウのピクセル寸法から再計算することができます。

//+------------------------------------------------------------------+
//| Преобразование координат. Верхний левый угол привязки            |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| time to X                                                        |
//+------------------------------------------------------------------+
int WindowGetX(long chart_id,datetime T)
  {
   datetime temp[]; int bar=(int)ChartGetInteger(chart_id,CHART_FIRST_VISIBLE_BAR);
   CopyTime(ChartSymbol(chart_id),ChartPeriod(chart_id),bar,1,temp);
   return((int)NormalizeDouble(
          ((T-temp[0])/(double)PeriodSeconds(ChartPeriod(chart_id)))*
          pow(2,ChartGetInteger(chart_id,CHART_SCALE)),0));
  };
//+------------------------------------------------------------------+
//| price to Y                                                       |
//+------------------------------------------------------------------+
int WindowGetY(long chart_id,double P)
  {
   return((int)((ChartGetDouble(chart_id,CHART_PRICE_MAX)-P)*
          (ChartGetInteger(chart_id,CHART_HEIGHT_IN_PIXELS)/
          (ChartGetDouble(chart_id,CHART_PRICE_MAX)-ChartGetDouble(chart_id,CHART_PRICE_MIN)))));
  };
//+------------------------------------------------------------------+
//| X to time                                                        |
//+------------------------------------------------------------------+
datetime WindowGetTime(long chart_id,int X)
  {
   datetime temp[]; int bar=(int)ChartGetInteger(chart_id,CHART_FIRST_VISIBLE_BAR);
   CopyTime(ChartSymbol(chart_id),ChartPeriod(chart_id),bar,1,temp);
   return((datetime)(temp[0]+
          (X/(double)pow(2,ChartGetInteger(chart_id,CHART_SCALE)))*
          PeriodSeconds(ChartPeriod(chart_id))));
  };
//+------------------------------------------------------------------+
//| Y to price                                                       |
//+------------------------------------------------------------------+
double WindowGetPrice(long chart_id,int Y)
  {
   return(ChartGetDouble(chart_id,CHART_PRICE_MAX)-Y/
          (ChartGetInteger(chart_id,CHART_HEIGHT_IN_PIXELS)/
          ChartGetDouble(chart_id,CHART_PRICE_MAX)-ChartGetDouble(chart_id,CHART_PRICE_MIN)));
  };

コール例

void OnStart()
  {
   datetime T=StringToTime("2011.02.25 18:12");
   double P=1.37831;
   Object(ChartID(),T,P);
  }
//+------------------------------------------------------------------+
void Object(long chart_id,datetime T,double P)
  {
   int x=WindowGetX(chart_id,T);
   int y=WindowGetY(chart_id,P);
   string name="Button";
   if(ObjectCreate(chart_id,name,OBJ_BUTTON,0,0,0,0,0))
     {//---
      ObjectSetInteger(chart_id,name,OBJPROP_BACK,1);
      ObjectSetInteger(chart_id,name,OBJPROP_SELECTABLE,false);
      ObjectSetInteger(chart_id,name,OBJPROP_STATE,false);
      //--- привяжем кнопку к правому верхнему углу графика
      ObjectSetInteger(chart_id,name,OBJPROP_CORNER,CORNER_LEFT_UPPER);
      //--- теперь настроим свойства объекта      
      ObjectSetInteger(chart_id,name,OBJPROP_XSIZE,40);
      ObjectSetInteger(chart_id,name,OBJPROP_YSIZE,40);
      ObjectSetInteger(chart_id,name,OBJPROP_BGCOLOR,Silver);
      ObjectSetInteger(chart_id,name,OBJPROP_XDISTANCE,x);
      ObjectSetInteger(chart_id,name,OBJPROP_YDISTANCE,y);
     }
  }
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Угол привязки
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Угол привязки
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Угол привязки - Документация по MQL5
 
やはり、これらの機能は標準装備 されていた方が良いのですが。そうすれば、このスレッドを読んでいる人たちだけでなく、すべての言語使用者が知ることができるはずです。
 
コード投稿を修正し、別関数(クラスなし)として記述し、バインド角度を 変更しました。
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Угол привязки
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Угол привязки
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Угол привязки - Документация по MQL5
 
Urain:
やはり、これらの機能は標準装備 されていた方が良いのですが。そうすれば、このスレッドを読んでいる人たちだけでなく、すべての言語使用者が知ることができるはずです。

ありがとうございました。
 
MetaDriver:
ありがとうございました。
データがなくてゼロで除算 されることもあるので、チェックを入れてください。
 

ある時刻のバーナンバーを検索する機能を標準実装してほしい。

今はCArrayLongで 実装しています。しかし、この場合、チャート自体にすでに存在する多くのデータをロードしなければなりません。実際には記憶を複製しているのです。標準的な形であれば、もっと早く使えると思うのですが。

 
Urain:
データがなくてゼロで除算されることもあるので、チェックを入れてください。
OKです。