Ваши вопросы по языку MQL4

gince

Местный знаток
Привет гуру. Как цвет конвертировать в целое число ?
Код:
color clr_=clrRed;
int cvet= .......clr_;  //??????????????????????
Посоветуйте что нибуть.
 

vladradon

Программист
Получить данные(символ,тф,объекты) не текущего графика с советника нельзя!
Я как-то пробовал создавать новый график с заданным номером или найти нужный график по имени символа - только у первого графика был номер 0, а у всех остальных что-то типа EMPTY. Вообще ощущение, что эти функции с графиками забыли вписать - только одни названия в коде...)))
 

bear1

Активный участник
//+------------------------------------------------------------------+
//| macd2.mq5 |
//| Copyright 2016, MetaQuotes Software Corp. |
//| _https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "_https://www.mql5.com"
#property version "1.00"
//+------------------------------------------------------------------+
//| Include |
//+------------------------------------------------------------------+
#include <Expert\Expert.mqh>
//--- available signals
#include <Expert\Signal\SignalMACD.mqh>
//--- available trailing
#include <Expert\Trailing\TrailingNone.mqh>
//--- available money management
#include <Expert\Money\MoneyFixedLot.mqh>
//+------------------------------------------------------------------+
//| Inputs |
//+------------------------------------------------------------------+
//--- inputs for expert
input string Expert_Title ="macd2"; // Document name
ulong Expert_MagicNumber =26349; //
bool Expert_EveryTick =false; //
//--- inputs for main signal
input int Signal_ThresholdOpen =10; // Signal threshold value to open [0...100]
input int Signal_ThresholdClose =10; // Signal threshold value to close [0...100]
input double Signal_PriceLevel =0.0; // Price level to execute a deal
input double Signal_StopLevel =50.0; // Stop Loss level (in points)
input double Signal_TakeLevel =50.0; // Take Profit level (in points)
input int Signal_Expiration =4; // Expiration of pending orders (in bars)
input int Signal_MACD_PeriodFast =12; // MACD(12,24,9,PRICE_CLOSE) Period of fast EMA
input int Signal_MACD_PeriodSlow =24; // MACD(12,24,9,PRICE_CLOSE) Period of slow EMA
input int Signal_MACD_PeriodSignal=9; // MACD(12,24,9,PRICE_CLOSE) Period of averaging of difference
input ENUM_APPLIED_PRICE Signal_MACD_Applied =PRICE_CLOSE; // MACD(12,24,9,PRICE_CLOSE) Prices series
input double Signal_MACD_Weight =1.0; // MACD(12,24,9,PRICE_CLOSE) Weight [0...1.0]
//--- inputs for money
input double Money_FixLot_Percent =10.0; // Percent
input double Money_FixLot_Lots =0.1; // Fixed volume
//+------------------------------------------------------------------+
//| Global expert object |
//+------------------------------------------------------------------+
CExpert ExtExpert;
//+------------------------------------------------------------------+
//| Initialization function of the expert |
//+------------------------------------------------------------------+
int OnInit()
{
//--- Initializing expert
if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
{
//--- failed
printf(__FUNCTION__+": error initializing expert");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Creating signal
CExpertSignal *signal=new CExpertSignal;
if(signal==NULL)
{
//--- failed
printf(__FUNCTION__+": error creating signal");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//---
ExtExpert.InitSignal(signal);
signal.ThresholdOpen(Signal_ThresholdOpen);
signal.ThresholdClose(Signal_ThresholdClose);
signal.PriceLevel(Signal_PriceLevel);
signal.StopLevel(Signal_StopLevel);
signal.TakeLevel(Signal_TakeLevel);
signal.Expiration(Signal_Expiration);
//--- Creating filter CSignalMACD
CSignalMACD *filter0=new CSignalMACD;
if(filter0==NULL)
{
//--- failed
printf(__FUNCTION__+": error creating filter0");
ExtExpert.Deinit();
return(INIT_FAILED);
}
signal.AddFilter(filter0);
//--- Set filter parameters
filter0.PeriodFast(Signal_MACD_PeriodFast);
filter0.PeriodSlow(Signal_MACD_PeriodSlow);
filter0.PeriodSignal(Signal_MACD_PeriodSignal);
filter0.Applied(Signal_MACD_Applied);
filter0.Weight(Signal_MACD_Weight);
//--- Creation of trailing object
CTrailingNone *trailing=new CTrailingNone;
if(trailing==NULL)
{
//--- failed
printf(__FUNCTION__+": error creating trailing");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Add trailing to expert (will be deleted automatically))
if(!ExtExpert.InitTrailing(trailing))
{
//--- failed
printf(__FUNCTION__+": error initializing trailing");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Set trailing parameters
//--- Creation of money object
CMoneyFixedLot *money=new CMoneyFixedLot;
if(money==NULL)
{
//--- failed
printf(__FUNCTION__+": error creating money");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Add money to expert (will be deleted automatically))
if(!ExtExpert.InitMoney(money))
{
//--- failed
printf(__FUNCTION__+": error initializing money");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Set money parameters
money.Percent(Money_FixLot_Percent);
money.Lots(Money_FixLot_Lots);
//--- Check all trading objects parameters
if(!ExtExpert.ValidationSettings())
{
//--- failed
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Tuning of all necessary indicators
if(!ExtExpert.InitIndicators())
{
//--- failed
printf(__FUNCTION__+": error initializing indicators");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- ok
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Deinitialization function of the expert |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
ExtExpert.Deinit();
}
//+------------------------------------------------------------------+
//| "Tick" event handler function |
//+------------------------------------------------------------------+
void OnTick()
{
ExtExpert.OnTick();
}
//+------------------------------------------------------------------+
//| "Trade" event handler function |
//+------------------------------------------------------------------+
void OnTrade()
{
ExtExpert.OnTrade();
}
//+------------------------------------------------------------------+
//| "Timer" event handler function |
//+------------------------------------------------------------------+
void OnTimer()
{
ExtExpert.OnTimer();
}
//+------------------------------------------------------------------+

Hii all,
I did this for a simple EA simple MACD Indicator in MT5 and closing were used. Although the EA uses the closing value of the bar the entry into the process at the opening (position OPEN) what I want. So, the "delay/lag" to put a button could you help me?

Thanks in advance
 
Последнее редактирование модератором:

forexOrx

Новичок форума
Ребята привет.
Подскажите пжлста, вопрос по MQL4.
Как выставить Stoploss и Takeprofit отложеному ордеру. Чтоб это делала моя сова.
И можно ли чтобы сова задавала отложенному ордеру Трейлинг.

Спасибо!
 

RichLux

Прохожий
Есть в МТ4 индикатор Билла Уияльямса Market Facilitation Index, нужна функция, которая бы выводила 1 при сформировашейся розовой линии , 2 зеленая, 3 - коричневая, 4 - синяя на баре [1]. Или по крайней мере совет, как можно объяснить советнику что линия розовая (коричневая...) на предыдущем баре и надо открыть ордер на покупку\продажу.
 

eevviill2

Местный знаток
Есть в МТ4 индикатор Билла Уияльямса Market Facilitation Index, нужна функция, которая бы выводила 1 при сформировашейся розовой линии , 2 зеленая, 3 - коричневая, 4 - синяя на баре [1]. Или по крайней мере совет, как можно объяснить советнику что линия розовая (коричневая...) на предыдущем баре и надо открыть ордер на покупку\продажу.
PHP:
iCustom(...,номер линии,1)
 

eevviill2

Местный знаток
PHP:
int hour_shift=intMathCeil(int(TimeCurrent()-TimeLocal())/60.0/60.0);
[TIP]possible loss of data due to type conversion [/TIP]

Тупые метаКроты браво!
MathCeil и MathFloor это целые числа!
 

vladradon

Программист
int*hour_shift=intMathCeil(int(TimeCurrent()-TimeLocal())/60.0/60.0);
int hour_shift=(int)(...
...(int)(MathCeil((TimeCurrent()-TimeLocal())/60.0/60.0)
Просто напиши код для начала с соблюдением всех необходимых скобок!
int от TimeСurrent() и ее производных всегда будет int! Т.к. эта функция возвращает значение в секундах, которые не могут быть ни дробными, ни отрицательными. Просто расставь грамотно все скобки и будет тебе благо!)))
 

eevviill2

Местный знаток
int hour_shift=(int)(...
...(int)(MathCeil((TimeCurrent()-TimeLocal())/60.0/60.0)
Просто напиши код для начала с соблюдением всех необходимых скобок!
int от TimeСurrent() и ее производных всегда будет int! Т.к. эта функция возвращает значение в секундах, которые не могут быть ни дробными, ни отрицательными. Просто расставь грамотно все скобки и будет тебе благо!)))
Молодец. У тебя логика как у большинства. Сочувствую.
Как раставлять я знаю.
PHP:
int(MathCeil((TimeCurrent()-TimeLocal())/60.0/60.0))
А то что MathCeil это целое число это факт.

P.S.
[IMPORTANT]Т.к. эта функция возвращает значение в секундах, которые не могут быть ни дробными, ни отрицательными.[/IMPORTANT]
Ну ну. Убери от 60 (.0) и mathCeil:laugh:
И ещё можешь глянуть сюда int(TimeLocal()-TimeCurrent())
 
Последнее редактирование:

vlad_123

Местный знаток
Молодец. У тебя логика как у большинства.
...
А то что MathCeil это целое число это факт.
:facepalm:
А документацию вкурить, прежде чем кидаться словами?
То, что возвращается целое число - это по смыслу.
То, что оно возвращается в виде double - это по факту.

_https://docs.mql4.com/ru/math/mathceil
Возвращает ближайшее сверху целое числовое значение.
double MathCeil(
double val // число
);
 
Верх