Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 733

 
Alexey Viktorov:
Согласен. Но чтобы понять что это окно "Торговля" а не "История счёта" надо ещё постараться. По невнимательности и ленивости, не напрягая мышцы своей головы, я решил что это окно "История счёта".

Бывает. Простительно.

 

Отключил стандартную линию бид на графике из-за того что неудобно читать пятизнак, сделал вывод 4 знака в верхний угол, но иногда цена уходит вниз, что снова доставляет неудобство :-)

Хочу сделать так чтобы объект Label перемещался вместе с ценой, правая ценовая метка OBJ_ARROW_RIGHT_PRICE не нравится из-за рамки.

Но почему-то позиционирование по цене бид не работает, метка выводится в левый верхний угол


//+------------------------------------------------------------------+
//|                                              CandleTimeStationary|
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+

#property indicator_chart_window
#property strict

//---- input parameters
input color Clock_Color = clrCrimson;

string objname="Bid";


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
        ObjectCreate(0, objname, OBJ_LABEL,0, 0, 0);
        
    

        return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason) { ObjectDelete(0, objname); } 

//+------------------------------------------------------------------+
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& spreads[])
{

        ObjectSetDouble(0, objname, OBJPROP_PRICE, SymbolInfoDouble(Symbol(), SYMBOL_BID));     
        ObjectSetString(0, objname, OBJPROP_TEXT, DoubleToString(SymbolInfoDouble(Symbol(), SYMBOL_BID), _Digits-1));
        ObjectSetInteger(0, objname, OBJPROP_FONTSIZE, 12);
        ObjectSetInteger(0, objname, OBJPROP_COLOR, Clock_Color);
        ObjectSetString(0, objname, OBJPROP_FONT, "Verdana");
        
        return(rates_total);
}
 
psyman:

Отключил стандартную линию бид на графике из-за того что неудобно читать пятизнак, сделал вывод 4 знака в верхний угол, но иногда цена уходит вниз, что снова доставляет неудобство :-)

Хочу сделать так чтобы объект Label перемещался вместе с ценой, правая ценовая метка OBJ_ARROW_RIGHT_PRICE не нравится из-за рамки.

Но почему-то позиционирование по цене бид не работает, метка выводится в левый верхний угол


Для OBJ_LABEL отчет позиции задаётся в пикселях.

ChartTimePriceToXY(0, 0, TimeCurrent(), Bid, x, y); // x, y добавьте в переменные, тип int
ObjectSetInteger(0, objname, OBJPROP_YDISTANCE, ulong(y)); //если на эту строчку будет предупреждение в компиляторе то, значит ulong ненужен
//ObjectSetDouble(0, objname, OBJPROP_PRICE, SymbolInfoDouble(Symbol(), SYMBOL_BID));
ObjectSetString(0, objname, OBJPROP_TEXT, DoubleToString(Bid, _Digits-1));
 
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+

double Znomer()
{
zn=0; // z-число
psd=0; // кол. положительных сделок
usd=0; // количество отрицательных сделок 
ww=0; // боол переменная 
nn=0; // боол переменная
C=0; // C = количество чередований между отрицательными и положительными сделками
index=OrdersHistoryTotal(); 
if(OrdersHistoryTotal()>302) index=301; // берём не более 301 сделки
if(index<30) return(1); // берём не менее 30
count=OrdersHistoryTotal(); // считаем от скольки 
prom=count-index; // выделяем только последние сделки
if (prom<0) prom=0; // исключаем ошибки

for( i=count;i>prom;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)== true)
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{// далее магия
pribul=OrderProfit(); 
if (ww==0&&pribul>1){C++;ww=1;nn=0;}// подсчитываем смену тенденции
if (nn==0&&pribul<1){C++;ww=0;nn=1;}// подсчитываем смену тенденции 
if (pribul>1){psd++;}//прибыльные сделки
if (pribul<1){usd++;}// убыточные сделки

}
}
}
/*/*
Величина Z = (A * (C — 0.5) — B)/ ((B*(B — C))/(C -1))^(1/2), где:
A = количество анализируемых сделок;
B = 2*количество прибыльных сделок * количество убыточных сделок;
C = количество чередований в выборке (чередованием считается каждая пара сделок, 
когда прибыльная сделка сменяет убыточную либо наоборот).
*/
zn = (index*(C-0.5)-(2*psd*usd))/
((((2*psd*usd)*((2*psd*usd)-C))/
(C-1))*((((2*psd*usd)*((2*psd*usd)-C))/
(C-1))*0.5));



return(zn);
}

Решил набросать простенький код для подсчёта тенденции к сливу в счёте. Для этого взял простую формулу Z-счёта и попробовал перенести в код mq4 .
Написал вроде всё верно, но как только запускаю простой вывод через Принт - то советник сразу не работает. При компиляции ошибок нет.
Мозги себе уже сломал на простом коде.

Спасибо, если поможете !

 
Aliaksei Karalkou:

Решил набросать простенький код для подсчёта тенденции к сливу в счёте. Для этого взял простую формулу Z-счёта и попробовал перенести в код mq4 .
Написал вроде всё верно, но как только запускаю простой вывод через Принт - то советник сразу не работает. При компиляции ошибок нет.
Мозги себе уже сломал на простом коде.

Спасибо, если поможете !

Разрешение на работу для советника проверь. И где в принт вывод? Этот кусок кода по-лбому что-то возвращает, раз ошибок нет, значит проблема за пределами этого куска кода. В этом куске разве, что деление на 0 может возникать

 
Ilya Prozumentov:

Для OBJ_LABEL отчет позиции задаётся в пикселях.

Илья, спасибо, получилось.

Только при переходе на следующую стадию - учету изменения размеров окна компилятор выдает предупреждение конверсии типа данных:

int width = ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0);

possible loss of data due to type conversion 4digit+.mq5 36 14


Хотя функция возвращает тип int.


 
psyman:

Илья, спасибо, получилось.

Только при переходе на следующую стадию - учету изменения размеров окна компилятор выдает предупреждение конверсии типа данных:

possible loss of data due to type conversion 4digit+.mq5 36 14


Хотя функция возвращает тип int.


Функция возвращает тип long
 
novichok2018:

Да ну?! И где это видно, что ордер закрылся?

Зеленый ТП в окне "торговля" означает, что текущая цена не вышла за пределы -100 пунктов от ТП, или правильнее сказать - находится в пределах 100 пунктов от ТП.

спасибо!
 
Artyom Trishkin:
Функция возвращает тип long

Что в таких случаях рекомендуется делать, менять тип переменной или оставить как есть?

 
psyman:

Что в таких случаях рекомендуется делать, менять тип переменной или оставить как есть?

int width = (int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0);
Причина обращения: