Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Думаю, да.
Это немного другое.
Глобальное против статического - это не здесь и не там. Но ваш метод сброса хорош. Он предотвращает превышение.
Я заговорил слишком рано. Ваш переходит в другую сторону. Он сработает при последующем нажатии CTRL. Если вы щелкните на графике, а затем нажмете CTRL, он сработает.
@honest_knave- спасибо за ваш комментарий. Я очень ценю это - но я начал пробовать сначала комментарий @Marco vd Heijden. (Я прочитал все ваши комментарии по этому поводу).
@Marco vd Heijden- Спасибо.
Но мне кажется, я делаю что-то не так, может быть, я не понимаю более четко. В любом случае я попробовал, вы можете найти его ниже код.
Где моя ошибка, пожалуйста?
//| keydown.mq4 |
//| Copyright 2016, Marco vd Heijden, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Marco vd Heijden, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
string prefix = "Custom Expert |";
string lotedit = prefix + "Edit Name";
string lotbtnplus = prefix + "Lot button Plus";
string lotbtnminus = prefix + "Lot button Minus";
double lot = 0.01, lotstep = 0.01 ;
bool ctrl_click;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create timer
EventSetTimer(60);
graphicsObj();
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
ObjectsDeleteAll( 0, prefix );
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
graphicsObj();
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer()
{
//---
}
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
if( id == CHARTEVENT_CLICK )
{
if ( sparam == lotbtnplus )
{
ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
lot = lot + lotstep;
update();
Print( " | lot plus : ", lot );
return;
}
Print( "Click" );
ctrl_click = 1;
}
if( id == CHARTEVENT_KEYDOWN )
{
//Print(lparam);// print to identify keycode
if( lparam == 17 ) // ctrl key
{
if( ctrl_click == 1 )// if mouse click
{
//Do Something when CTRL (keycode 17) is pressed
if ( sparam == lotbtnplus )
{
ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
lot = lot + ( lotstep * 10 );
Print( " | lot plus + Ctrl initial: ", lot );
update();
Print( " | lot plus + Ctrl: ", lot );
return;
}
Print( "Ctrl + Click" );
ctrl_click = 0; // reset
}
}
ctrl_click = 0; // reset if not ctrl
}
}
//|+--------------------------------------------------------------------------------+
//| - Function Update |
//|+--------------------------------------------------------------------------------+
void update()
{
//---
ObjectSetString( 0, lotedit, OBJPROP_TEXT, DoubleToString( lot, 2 ) );
//---
return;
}
{
ObjectCreate(0, lotedit, OBJ_EDIT, 0,0,0);
ObjectSetInteger(0, lotedit, OBJPROP_XDISTANCE, 30);
ObjectSetInteger(0, lotedit, OBJPROP_YDISTANCE, 30);
ObjectSetInteger(0, lotedit, OBJPROP_XSIZE, 60);
ObjectSetInteger(0, lotedit, OBJPROP_YSIZE, 30);
ObjectSetString(0, lotedit, OBJPROP_TEXT, DoubleToString( lot, 2 ));
ObjectCreate( 0, lotbtnplus, OBJ_BUTTON, 0, 0, 0);
ObjectSetString( 0, lotbtnplus, OBJPROP_TEXT, "+");
ObjectSetInteger( 0, lotbtnplus, OBJPROP_XDISTANCE, 100);
ObjectSetInteger( 0, lotbtnplus, OBJPROP_YDISTANCE, 30);
ObjectSetInteger( 0, lotbtnplus, OBJPROP_XSIZE, 70);
ObjectSetInteger( 0, lotbtnplus, OBJPROP_YSIZE, 30);
ObjectSetInteger( 0, lotbtnplus, OBJPROP_BACK, false);
ObjectSetInteger( 0, lotbtnplus, OBJPROP_SELECTABLE, false);
}
Ваша первая проблема заключается в том, что CHARTEVENT_CLICK - это не то же самое, что CHARTEVENT_OBJECT_CLICK. Вы хотите перехватить щелчки на объекте, а не просто любой щелчок на графике.
const long &lparam,
const double &dparam,
const string &sparam)
{
// if( id == CHARTEVENT_CLICK )
if( id == CHARTEVENT_OBJECT_CLICK )
const long &lparam,
const double &dparam,
const string &sparam)
{
static bool wasCTRL=false;
if(id==CHARTEVENT_OBJECT_CLICK && sparam == lotbtnplus)
{
ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
lot+=(wasCTRL)?lotstep*10:lotstep;
update();
Print( " | lot plus : ", lot );
return;
}
wasCTRL=(id==CHARTEVENT_KEYDOWN && lparam==17);
}
Это может помочь. Вы можете обнаружить, что он переходит к 0.1 только на втором щелчке мыши, в зависимости от того, как быстро вы нажимаете кнопку после CTRL.
#Ctrl + кнопка мыши - закрыто
Вау, просто как это, удивительно огромное спасибо честное слово!
Особая благодарность@honest_knave и @Marco vd Heijden.
(Платформа MT4 обновлялась дважды.) После этого обновления эта таблица не обновляется на графике, я проверил все о таблице и не вижу никаких проблем.
Должен сообщить, что я также использую цены Bid и Ask над таблицей, Bid и Ask работают хорошо, но таблица не работает.
Если вы понимаете, что меня беспокоит, сообщите мне, как я могу решить эту проблему.
Заранее спасибо.
Есть ли у вас какой-нибудь код об электронной таблице?
Есть ли у вас какой-нибудь код об электронной таблице?
Могу ли я написать 2 разные функции Label Function?
(например: 1 для текста, 2 для текста и размера шрифта).