初心者の方からの質問 MQL4 MT4 MetaTrader 4 - ページ 52

 
ilnur17021992:
価格タグ(OBJ_ARROW_LEFT_PRICE)に、価格の代わりに独自のテキストを持たせることはできますか?もし可能なら、どのようにすればよいですか?
ObjectCreate(Name,OBJ_TEXT,Window,aTime,aPrice);
 
こんにちは!どなたかH4とM15のチャートの価格が一致しない理由を教えてください。M15のスクリーンショットでは、価格は赤いライン(垂直線の 左側)を越えています。そして、その1分後には、価格がまだそれに対して非常に遠い(ラインの右側)H4のスクリーンショットがあります。
そして、このプログラムでは、別のdtzだけがロウソクの影になっています(ロウソクは右側の一番外側です)。
 
Equal:
こんにちは!どなたかH4とM15のチャートの価格が一致しない理由を教えてください。M15のスクリーンショットでは、価格は赤いライン(垂直線の 左側)を越えています。そして、その1分後には、価格がまだそれに対して非常に遠い(ラインの右側)H4のスクリーンショットがあります。
そして、これはそのプログラムのスクリーンショットですが、別のdtzではローソクの影(ローソクは右の一番外側です)
証券会社によって見積もりが違うというのは、初耳ですか?同じ証券会社でもデモとリアルで違うんですねー。なんということでしょう(。
 

似たようなことを書こうとしている:IceFX DrawProfit

コード

void start()
{
   for(int i=0;i<OrdersHistoryTotal();i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && OrderSymbol()==Symbol() && OrderType()<=1)
      History();
   }
}
  
void History()
{
   string Ticket=IntegerToString(OrderTicket());
   color col=Red;
   if(OrderType()==0)col=Blue;
   datetime a=OrderOpenTime();
   double b=OrderOpenPrice();
   datetime c=OrderCloseTime();
   double d=OrderClosePrice();
   double profit=OrderProfit();
  
   ObjectCreate(Ticket+"Open",OBJ_ARROW,0,a,b);
   ObjectSet(Ticket+"Open",OBJPROP_COLOR,col);
   ObjectSet(Ticket+"Open",OBJPROP_ARROWCODE,1);
      
   ObjectCreate(Ticket+"Line",OBJ_TREND,0,a,b,c,d);
   ObjectSet(Ticket+"Line",OBJPROP_COLOR,col);
   ObjectSet(Ticket+"Line",OBJPROP_WIDTH,1);
   ObjectSet(Ticket+"Line",OBJPROP_STYLE,STYLE_DOT);
   ObjectSet(Ticket+"Line",OBJPROP_RAY,0);
      
   ObjectCreate(Ticket+"Close",OBJ_ARROW,0,c,d);
   ObjectSet(Ticket+"Close",OBJPROP_COLOR,Green);
   ObjectSet(Ticket+"Close",OBJPROP_ARROWCODE,3);
      
   ObjectCreate(Ticket+"Profit",OBJ_TEXT,0,c,d);
   ObjectSet(Ticket+"Profit",OBJPROP_WIDTH,2);
   ObjectSetText(Ticket+"Profit",DoubleToString(profit,2),10,"Arial",White);
   ObjectSet(Ticket+"Profit",OBJPROP_PRICE1,d+Point*5);
   ObjectSet(Ticket+"Profit",OBJPROP_TIME1,c+10000);      
}

全てうまくいくのですが、グリッドアドバイザーを使っていて、現時点では注文の束をカバーしており、その結果、利益がお互いに重なっています。私は、今のように注文ごとに別々にではなく、この閉じた束の利益を合計してその金額だけを表示するようにしたいです(IceFX DrawProfit indicatorに実装されているように)。手伝ってください :)


ファイル:
 
Vitalie Postolache:
証券会社によって見積もりが違うというのは初耳ですか?そう、同じ証券会社でも、デモとリアルトレードでは違うのですなんということでしょう(。
驚きが違います。これは同一のリアル口座 であり、異なるタイムフレームに切り替えただけで価格が変化する(同じではない)。
別の証券会社でも、実際の口座でチャートを変更してもすべてOKです異なる価格が異なるという事実は明らかである、それは1つが一度に2つの価格、分、時間上の1つが異なる(非常に異なる)であるかのように持っていることは明らかではありません。そうなってはいけないということは理解しているのですが、どこに問題があるのだろうと思います。ちなみにローソク足は、次のオープニングから約1時間で「修正」されました。
 
ilnur17021992:

似たようなことを書こうとしている:IceFX DrawProfit

コード

void start()
{
   for(int i=0;i<OrdersHistoryTotal();i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && OrderSymbol()==Symbol() && OrderType()<=1)
      History();
   }
}
  
void History()
{
   string Ticket=IntegerToString(OrderTicket());
   color col=Red;
   if(OrderType()==0)col=Blue;
   datetime a=OrderOpenTime();
   double b=OrderOpenPrice();
   datetime c=OrderCloseTime();
   double d=OrderClosePrice();
   double profit=OrderProfit();
  
   ObjectCreate(Ticket+"Open",OBJ_ARROW,0,a,b);
   ObjectSet(Ticket+"Open",OBJPROP_COLOR,col);
   ObjectSet(Ticket+"Open",OBJPROP_ARROWCODE,1);
      
   ObjectCreate(Ticket+"Line",OBJ_TREND,0,a,b,c,d);
   ObjectSet(Ticket+"Line",OBJPROP_COLOR,col);
   ObjectSet(Ticket+"Line",OBJPROP_WIDTH,1);
   ObjectSet(Ticket+"Line",OBJPROP_STYLE,STYLE_DOT);
   ObjectSet(Ticket+"Line",OBJPROP_RAY,0);
      
   ObjectCreate(Ticket+"Close",OBJ_ARROW,0,c,d);
   ObjectSet(Ticket+"Close",OBJPROP_COLOR,Green);
   ObjectSet(Ticket+"Close",OBJPROP_ARROWCODE,3);
      
   ObjectCreate(Ticket+"Profit",OBJ_TEXT,0,c,d);
   ObjectSet(Ticket+"Profit",OBJPROP_WIDTH,2);
   ObjectSetText(Ticket+"Profit",DoubleToString(profit,2),10,"Arial",White);
   ObjectSet(Ticket+"Profit",OBJPROP_PRICE1,d+Point*5);
   ObjectSet(Ticket+"Profit",OBJPROP_TIME1,c+10000);      
}

全てうまくいくのですが、グリッドアドバイザーを使っていて、現時点では注文の束をカバーしており、その結果、利益がお互いに重なっています。今のように注文ごとに別々にではなく、この閉じた束の利益を合計して金額だけを表示してほしいのです(IceFX DrawProfit indicatorに実装されているように)。手伝ってください :)


利益は別のサイクルで計算されます
 
Alekseu Fedotov:
プロフィット・カウントを別サイクルで行う
どれだ?特定の注文がグループであり、その利益を合計する必要があることを知るにはどうすればよいですか?
 
ilnur17021992:
どちらでしょうか?特定の注文がグループであり、その利益を合計する必要があると判断する方法は?
また、それらを閉じる方法は、関数によるグループ、あるいは他の方法でしょうか?
 
Vitaly Muzichenko:
どのように閉じているのですか?関数や他の方法でグループとして閉じているのですか?
注文はロボットネットメーカーによって開始され、グループ全体で共通のTPを計算・設定し、それによって注文が決済されます。


スクリーンショットを添付します。
ファイル:
 
ilnur17021992:
注文はネットメーカーロボットによって開始され、グループ全体に対して共通のTPを計算し、その時点でクローズされます。

スクリーンショットを添付しました。

こんな感じです。

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int TotalPos=-1;
void OnTick()
{
 // остальной код

//--
  if(OrdersTotal()!=TotalPos) { // не мучаем каждый тик
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
    if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
     if(OrderSymbol()==Symbol() && OrderType()<=1) {
      History();

      ...
     }
  }}} TotalPos=OrdersTotal(); // запомним количество

//--
}

//+------------------------------------------------------------------+
//| Create Object istory                                             |
//+------------------------------------------------------------------+
void History() {
  string Ticket=(string)OrderTicket();
  color col=Red;
  if(OrderType()==0)col=Blue;
  datetime a=OrderOpenTime();
  double b=OrderOpenPrice();
  datetime c=OrderCloseTime();
  double d=OrderClosePrice();
  double prSep=OrderProfit()+OrderCommission()+OrderSwap();
  double prAll=0;
  int    cn=0;
  string hTicket;
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
    if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
     if(OrderSymbol()==Symbol() && OrderType()<=1) {
      datetime ct=OrderCloseTime();
      // 60 секунд разницы между закрытием первой и последней в сетке
      if(c<=ct+60 && c>=ct-60) {
        prAll+=OrderProfit()+OrderCommission()+OrderSwap();
        hTicket=(string)OrderTicket();
        cn++;
      }
   }}}
   ObjectCreate(Ticket+"Open",OBJ_ARROW,0,a,b);
   ObjectSet(Ticket+"Open",OBJPROP_COLOR,col);
   ObjectSet(Ticket+"Open",OBJPROP_ARROWCODE,1);
      
   ObjectCreate(Ticket+"Line",OBJ_TREND,0,a,b,c,d);
   ObjectSet(Ticket+"Line",OBJPROP_COLOR,col);
   ObjectSet(Ticket+"Line",OBJPROP_WIDTH,1);
   ObjectSet(Ticket+"Line",OBJPROP_STYLE,STYLE_DOT);
   ObjectSet(Ticket+"Line",OBJPROP_RAY,0);
      
   ObjectCreate(Ticket+"Close",OBJ_ARROW,0,c,d);
   ObjectSet(Ticket+"Close",OBJPROP_COLOR,Green);
   ObjectSet(Ticket+"Close",OBJPROP_ARROWCODE,3);
  
   Ticket=cn>1?hTicket:Ticket;
   ObjectCreate(Ticket+"Profit",OBJ_TEXT,0,c,d);
   ObjectSet(Ticket+"Profit",OBJPROP_ANCHOR,0);
   ObjectSetText(Ticket+"Profit",DoubleToString(prAll,2),10,"Arial",/*White*/clrBlack);
   ObjectSet(Ticket+"Profit",OBJPROP_PRICE1,d);
   ObjectSet(Ticket+"Profit",OBJPROP_TIME1,c+Period()*60*2);
}
理由: