MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 121

 
var58:
こんにちは。MQL4 EAのコードに注文を開くルールを記述する方法を教えてください:市場にある特定のマジックナンバーの注文がなければ、EAはそのメインアルゴリズムに従って何も開きません。

というところでしょうか。

void OnTick()
{
  Comment( IsCount(ORDER_TYPE_BUY_STOP, 5) ); // type - тип, mg - magic
}

//------- Вернёт количество
int IsCount(int type, int mg) {
int p=0;
  for(int i=0; i<OrdersTotal(); i++) {
   if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==Symbol() && OrderMagicNumber()==mg) {
     if(OrderType()==type) {
      p++;
  }}}}
  return(p);
}
 

ユーザーが配列に入力 できるようにするにはどうすればよいですか?

 
-Aleks-:

ユーザーが配列に入力 できるようにするにはどうすればよいですか?

ユーザー以外の誰がそれを埋めることができるのか?
 

はじめまして、チャート上に注文履歴を 描画するインジケーターがあります、コードです。

//+------------------------------------------------------------------+
//|                                                      history.mq4 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window

extern int        MagicNumber                = 1110;
extern datetime   HistoryOrdersFromDateTime  = 0;
extern color      SellColor                  = clrRed;
extern color      BuyColor                   = clrBlue;
extern color      ProfitColor                = clrWhite;
extern bool       DeleteHistoryOrders        = false;


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
  
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+

void start()
{
   for(int i=OrdersHistoryTotal()-1; i>=0; i--)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol() && OrderType()<=1)
      {
         if(HistoryOrdersFromDateTime<OrderCloseTime())
         {
            if((TimeCurrent()-OrderCloseTime())>60)
               HistoryOrders();
         }
      }
   }
}

void HistoryOrders()
{
   int CountOrders=0;
   double b=OrderOpenPrice(), d=OrderClosePrice(), lots=OrderLots(), Profit=0;
   datetime a=OrderOpenTime(), c=OrderCloseTime(), close_time;
   string Ticket=(string)OrderTicket(), type="Sell", symbol=OrderSymbol(), comment=OrderComment(), Background;
   color col=SellColor;
   if(OrderType()==0) {col=BuyColor; type="Buy";}

   //Расчет профита
   for(int i=OrdersHistoryTotal()-1; i>=0; i--)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol() && OrderType()<=1)
      {
         close_time=OrderCloseTime();
         if(c<=close_time+60 && c>=close_time-60)
         {
            Profit+=OrderProfit()+OrderCommission()+OrderSwap();
            Ticket=(string)OrderTicket();
         }  
      }      
   }
  
   //Размер фона  
   for(int i=2; i<StringLen(DoubleToString(Profit,2)); i++)
      StringAdd(Background,"g");

   if(DeleteHistoryOrders==false)
   {
      //Начальная точка
      ObjectCreate("#"+Ticket+" "+type+" "+DoubleToString(lots,2)+" "+symbol+" at "+DoubleToString(b,Digits)+"\n"+comment,OBJ_ARROW,0,a,b);
      ObjectSet("#"+Ticket+" "+type+" "+DoubleToString(lots,2)+" "+symbol+" at "+DoubleToString(b,Digits)+"\n"+comment,OBJPROP_COLOR,col);
      ObjectSet("#"+Ticket+" "+type+" "+DoubleToString(lots,2)+" "+symbol+" at "+DoubleToString(b,Digits)+"\n"+comment,OBJPROP_ARROWCODE,1);
      
      //Линия  
      ObjectCreate("#"+Ticket+" "+DoubleToString(b,Digits)+" -> "+DoubleToString(d,Digits),OBJ_TREND,0,a,b,c,d);
      ObjectSet("#"+Ticket+" "+DoubleToString(b,Digits)+" -> "+DoubleToString(d,Digits),OBJPROP_COLOR,col);
      ObjectSet("#"+Ticket+" "+DoubleToString(b,Digits)+" -> "+DoubleToString(d,Digits),OBJPROP_WIDTH,1);
      ObjectSet("#"+Ticket+" "+DoubleToString(b,Digits)+" -> "+DoubleToString(d,Digits),OBJPROP_STYLE,STYLE_DOT);
      ObjectSet("#"+Ticket+" "+DoubleToString(b,Digits)+" -> "+DoubleToString(d,Digits),OBJPROP_RAY,0);
  
      //Конечная точка
      ObjectCreate("#"+Ticket+" "+type+" "+DoubleToString(lots,2)+" "+symbol+" at "+DoubleToString(b,Digits)+" close at "+DoubleToString(d,Digits),OBJ_ARROW,0,c,d);
      ObjectSet("#"+Ticket+" "+type+" "+DoubleToString(lots,2)+" "+symbol+" at "+DoubleToString(b,Digits)+" close at "+DoubleToString(d,Digits),OBJPROP_COLOR,col);
      ObjectSet("#"+Ticket+" "+type+" "+DoubleToString(lots,2)+" "+symbol+" at "+DoubleToString(b,Digits)+" close at "+DoubleToString(d,Digits),OBJPROP_ARROWCODE,3);

      //Фон профита
      ObjectCreate("#"+Ticket+" Background",OBJ_TEXT,0,c,d);
      ObjectSet("#"+Ticket+" Background",OBJPROP_ANCHOR,ANCHOR_LOWER);
      ObjectSetText("#"+Ticket+" Background",Background,10,"Webdings",col);
      ObjectSet("#"+Ticket+" Background",OBJPROP_PRICE1,d);
      ObjectSet("#"+Ticket+" Background",OBJPROP_TIME1,c+Period());

      //Профит
      ObjectCreate("#"+Ticket+" Profit: "+DoubleToString(Profit,2),OBJ_TEXT,0,c,d);
      ObjectSet("#"+Ticket+" Profit: "+DoubleToString(Profit,2),OBJPROP_ANCHOR,ANCHOR_LOWER);
      ObjectSetText("#"+Ticket+" Profit: "+DoubleToString(Profit,2),DoubleToString(Profit,2),10,"Arial",ProfitColor);
      ObjectSet("#"+Ticket+" Profit: "+DoubleToString(Profit,2),OBJPROP_PRICE1,d);
      ObjectSet("#"+Ticket+" Profit: "+DoubleToString(Profit,2),OBJPROP_TIME1,c+Period());
   } else ObjectsDeleteAll(0, "#"+Ticket+" ");  
}

void OnDeinit(const int reason)
{
   for(int i=0; i<OrdersHistoryTotal(); i++)
   {
      DeleteHistoryOrders=true;
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol())
         HistoryOrders();
   }
}

シングルトレードの場合、インジケータは正しく描画されますが(line>background>profit)、クローズドオーダーセットの表示では小さな「バグ」があります(スクリーンショットを添付)、ラインが背景と利益の上に重なっています(line(1) >background>profit>line(2) >line(3) >line(4) ... ...)。).

次のようになります。(行(1)>行(2)>行(3)>行(4) ... ....>フォン>プロフィット)。各種改ざんがうまくいかないので、修正にご協力ください。

ファイル:
 
Vitaly Muzichenko:
ユーザー以外の誰が記入できるのか?

設定による記入の仕方ということです。文字列を通して、その値を配列に入れるとすると......。

 
-Aleks-:

設定による記入の仕方ということです。文字列を通して、その値を配列に入れるとすると......。

この ように
StringToCharArray - Преобразование данных - Справочник MQL4
StringToCharArray - Преобразование данных - Справочник MQL4
  • docs.mql4.com
StringToCharArray - Преобразование данных - Справочник MQL4
 
Vitaly Muzichenko:

というところでしょうか。

void OnTick()
{
  Comment( IsCount(ORDER_TYPE_BUY_STOP, 5) ); // type - тип, mg - magic
}

//------- Вернёт количество
int IsCount(int type, int mg) {
int p=0;
  for(int i=0; i<OrdersTotal(); i++) {
   if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==Symbol() && OrderMagicNumber()==mg) {
     if(OrderType()==type) {
      p++;
  }}}}
  return(p);
}
ORDER_TYPE_BUY_STOPは MQL4 Editorでハイライトされていますが、MQL4 Helpではハイライトされません。質問:MQL4で、OP_BUYSTOP型に対応していますか?ただ、まだ確認する時間がないんです。
 
Vitaly Muzichenko:

というところでしょうか。

void OnTick()
{
  Comment( IsCount(ORDER_TYPE_BUY_STOP, 5) ); // type - тип, mg - magic
}

//------- Вернёт количество
int IsCount(int type, int mg) {
int p=0;
  for(int i=0; i<OrdersTotal(); i++) {
   if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==Symbol() && OrderMagicNumber()==mg) {
     if(OrderType()==type) {
      p++;
  }}}}
  return(p);
}

Vitaly Muzichenko:

Примерно так можно:

void OnTick()
{
  Comment( IsCount(ORDER_TYPE_BUY_STOP, 5) ); // type - тип, mg - magic
}

//------- Вернёт количество
int IsCount(int type, int mg) {
int p=0;
  for(int i=0; i<OrdersTotal(); i++) {
   if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==Symbol() && OrderMagicNumber()==mg) {
     if(OrderType()==type) {
      p++;
  }}}}
  return(p);
}

Спасибо большое, попробую. 

 
Vitaly Muzichenko:
なんだか、こんな 感じです。

ありがとうございました。

 
Artyom Trishkin:
ORDER_TYPE_BUY_STOPは、MQL4 Editorではハイライトされていますが、MQL4 Helpではハイライトされていません。質問:MQL4でOP_BUYSTOP型に対応するのは、動作しますか?ただ、まだ確認する時間がないんです。

はい、100%効果があります。今はこの方法でしか書いていません。今、多くのものがFiveからFourに移行しています。

これでも動くのですが、コンパイラはトレンドラインと断言していました。

    ObjectSetInteger(chart_ID,nm,OBJPROP_TIME,t1);
    ObjectSetDouble(chart_ID,nm,OBJPROP_PRICE,p1);
    ObjectSetInteger(chart_ID,nm,OBJPROP_TIME,1,t2);
    ObjectSetDouble(chart_ID,nm,OBJPROP_PRICE,1,p2);