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

 
MakarFX:

エラーも出ない。

また、エラーはランタイムエラーだけ でなく、アルゴリズム的なものもあり得ます

原因を探るには、コードが必要です。

MakarFX:

この座標では、ボタンの長さがX点から+/-でカウントされるため、ボタンが逆さまに表示されます。

なんでそんな変なボタンが必要なんだ......?

 
MakarFX:

損益が出たときに ExpertRemove() するオプションを提案することができる

しゃい

読んでみたが、行動の論理がよくわからない。

指定されたイベントに達すると、Expert Advisorは無効化され、チャートから削除されますね?

 
Mihail Matkovskij:

また、エラーはランタイムエラーだけ でなく、アルゴリズム的なものもあり得ます

原因を探るには、コードが必要です。

なんでそんな変なボタンが必要なんだ......?

偶然にもそのようなバグに遭遇したことを書きました。

このコードです。

//+------------------------------------------------------------------+
//|                                                          BAG.mq4 |
//|                                           Copyright 2020, DrMak. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, DrMak."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   CreateButton(0,"Button_1",0,200,100,100,50,CORNER_RIGHT_UPPER," ","START","Arial Black",10,
   clrWhite,clrGreen,BORDER_SUNKEN,false,false,false,false,false,0);
   CreateButton(0,"Button_2",0,200,100,-100,-50,CORNER_RIGHT_UPPER," ","START","Arial Black",10,
   clrWhite,clrGreen,BORDER_SUNKEN,false,false,false,false,false,0);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectsDeleteAll(0,"Button_");
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Создает кнопку                                                   |
//+------------------------------------------------------------------+
bool CreateButton(const long              chart_ID=0,               // ID графика
                  const string            name="Button",            // имя кнопки
                  const int               sub_window=0,             // номер подокна
                  const int               x=0,                      // координата по оси X
                  const int               y=0,                      // координата по оси Y
                  const int               width=50,                 // ширина кнопки
                  const int               height=18,                // высота кнопки
                  const int               corner=0,                 // угол графика для привязки
                  const string            tool="TOOLTIP",           // TOOLTIP
                  const string            text="Button",            // текст
                  const string            font="Arial",             // шрифт
                  const int               font_size=10,             // размер шрифта
                  const color             clr=clrBlack,             // цвет текста
                  const color             back_clr=C'236,233,216',  // цвет фона
                  ENUM_BORDER_TYPE        border_type=BORDER_FLAT,  // тип границы
                  const bool              state=false,              // нажата/отжата
                  const bool              back=false,               // на заднем плане
                  const bool              selection=false,          // выделить для перемещений
                  const bool              selected=false,           // выделить для перемещений
                  const bool              hidden=true,              // скрыт в списке объектов
                  const long              z_order=0)                // приоритет на нажатие мышью
  {
//--- сбросим значение ошибки
   ResetLastError();
//--- создадим кнопку
   if(!ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0))
     {
      Print(__FUNCTION__, ": не удалось создать кнопку! Код ошибки = ",GetLastError()); return(false);
     }
   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
   ObjectSetString(chart_ID,name,OBJPROP_TOOLTIP,tool);
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
   ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
   ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,border_type);
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
   ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selected);
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- успешное выполнение
   return(true);
  }
//+------------------------------------------------------------------+
 
законопослушный гражданин:

しゃい

読んでみたが、行動の論理がよくわからない

指定されたイベントに達すると、EAが非アクティブになり、チャートから完全に削除されますね?

はい
 
MakarFX:

偶然にもそのようなバグに遭遇したことを書きました。

これがそのコードです。

だからここでは、どのボタンも反応しない。OnChartEvent ハンドラが空なのですが・・・。

 
Mihail Matkovskij:

だからここでは、どのボタンも反応しない。OnChartEvent ハンドラが空なのですが・・・。

片方のボタンが押され、もう片方のボタンが押されない。
 
MakarFX:
やってみる 片方のボタンが押され、もう片方のボタンが押されない

とにかく誰がやっているのか、負の次元を設定するのか、なぜなのか、お恥ずかしい 話ですが......?

 
MakarFX:
はい

了解です、私には効きません。

グローバル変数を作成し、フクロウの電源を切ると、ロットがリセットされるように戻すこともできます。

兎にも角にも

を作成すると、グローバル変数

datetime Start;

int OnInit()
{
   Start=TimeCurrent();
.....................
}
void OnTick()
{
   if (!IsTradeAllowed()) 
   {
      DrawLABEL("Торговля",0,0,0,Red,"Торговля запрещена");
      Start=TimeCurrent();
      return;
   } 
.....................
}

で、その後にオープン/クローズド・オーダーがなければ "スタート"

Lots=Lot;
でも、まだちゃんとした作り方がわからないんです
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Глобальные переменные - Переменные - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
законопослушный гражданин:

了解です、私には効きません。

グローバル変数を作成し、フクロウの電源を切ると、ロットがリセットされるように戻すこともできます。

兎にも角にも

を作成すると、グローバル変数

をクリックし、その後、開閉注文がなければ「開始」します。

でも、どうやって作ればいいのか、まだよくわからない。

ボタンを作ります)


 
Mihail Matkovskij:

とにかく誰がやっているのか、負の次元を設定するのか、なぜなのか、お恥ずかしい 話ですが......?

偶然にもこのバグを発見し、不思議に思っていました。