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

AlexeyVik

Программист mql4 mql5
Спасибо, понял как пользоваться TextGetSize . Но решить задачу не получается пока. Изменения размеров пришлось подгонять на глаз. И при изменении шрифта пропорции сбиваются, лучше чем было, но не то что надо.
TextOut не понял как можно применить к ситуации.

Можно было бы конечно, данные лота, и прибылей вписать в одну строку. Но так возникает другая проблема. Когда в прибыли меняется количество знаков, то скачет текст на длину этого знака.

Код:
Expand Collapse Copy
   TextGetSize("4",width_t,height_t); // ширина и высота текста

4 тут взято произвольно, длина 4ки равна 4м, но у всех символов разная длина. От 2 до 5, которые я просмотрел.

t1...t10. Пока оставил, пробовал каждую строку в отдельности считать через TextOut , но тоже не вышло ничего путного.
Сделай лучше через ресурсы.
Пример тут -https://www.mql5.com/ru/code/24076
Ресурсы одинаково работают как в mql5 так и в mql4.
 

sdg_3

Прохожий
здравствуйте, подскажите как можно реализовать в коде , чтобы при срабатывании например байстопа - закрывались все открытые ордера на бай. Спасибо
 

kudinoff

Почетный гражданин
Код:
Expand Collapse Copy
  double stop = 0.0;
  if(StopLoss>0) 
      stop = NormalizeDouble(Signal<OP_SELL?MathMin(price-StopLoss*Point,price-GetTrueStopLevel()*Point):MathMax(price+StopLoss*Point,price+GetTrueStopLevel()*Point),Digits);
Ошибка 130 при нулевом StopLoss (через раз)
 

vladradon

Программист
Такую ошибку у себя ловлю.
Супер! А я куда ни суну этот код - везде не компилируется...:ROFLMAO::ROFLMAO::ROFLMAO:
C++:
Expand Collapse Copy
DrawLine(Preffix+"LineV", time[0]+MA1Shift*TimeShift, MA1[0], time[0]+MA3Shift*TimeShift, MA3[0], LineStyle, LineWidth, LineColor, false, false, SelectLine);
   int Delta=(int)((MA2[0]-ObjectGetValueByTime(0,Preffix+"LineV",time[0]+MA2Shift*TimeShift,0))/_Point);
   int K=1;
   if((MA2Shift-MA1Shift)<0) return(rates_total);
   if((int)(MA2[MA2Shift-MA1Shift]/_Point)>(int)(MA1[0]/_Point)) K=-1;
   Delta*=K;
может нужно еще что-то?:rolleyes::unsure:
 
Последнее редактирование:

vladradon

Программист
какие проблемы открыться?
Так покажи где что какими командами с какими параметрами открывается! И где заложенные в открытие параметры обретают свое конечное значение. Все конечные значения стопов и тейков должны рассчитываться или быть рассчитаны.
 

kudinoff

Почетный гражданин
Код:
Expand Collapse Copy
ticket = OrderSend(NULL,OP_SELL,Lot,Bid,Slippage,stop,take,"",Magic,0,Red);
err = GetLastError(); if(err>0) Print(ErrorDescription(err)); if(err == 130) Print("StopLoss "+stop);
1622724743239.png
 

vladradon

Программист
Код:
Expand Collapse Copy
ticket = OrderSend(NULL,OP_SELL,Lot,Bid,Slippage,stop,take,"",Magic,0,Red);
err = GetLastError(); if(err>0) Print(ErrorDescription(err)); if(err == 130) Print("StopLoss "+stop);
Посмотреть вложение 437394
Если счет ECN, то изначальная расстановка стопов и тейков может не работать и выдавать ошибку. Сначала выствляется ордер с нулевыми стопом и тейком и потом командой OrderModify при получении положительного тикета при выставления ордера, выставляются стопы и тейки.
Перед каждой значимой командой нужно обнулять ResetLastError() на всякий случай.
 
Последнее редактирование:

Wolf77

Интересующийся
Вечер добрый всем! Решил вот попробовать свои силы в написании советников, начал с самого простого и сразу застрял на моменте открытия сделок, проблема в том что открывает и после закрытия не дожидаясь наступления следующего сигнала сразу открывает повторно ордер, а хотелось бы чтобы после закрытия открывал только при наступлении следующего сигнала.
Подскажите чайнику начинающему как это в коде реализовать исходник своего кода могу выслать
 

Ugar

Гуру форума
Вечер добрый всем! Решил вот попробовать свои силы в написании советников, начал с самого простого и сразу застрял на моменте открытия сделок, проблема в том что открывает и после закрытия не дожидаясь наступления следующего сигнала сразу открывает повторно ордер, а хотелось бы чтобы после закрытия открывал только при наступлении следующего сигнала.
Подскажите чайнику начинающему как это в коде реализовать исходник своего кода могу выслать
Надо сюда выкладывать. И индикатор то же.
 

Viktor73

Новичок форума
Помогите. не могу додумать код закрытия и открытия ордеров на новой свече после пересечения линии канала.
Советнику прописал торговлю по пересечения линий все делает, но хочется что бы он это делал на новой свече. нужен именно код. СПС!
 

mobidik

-----
Помогите. не могу додумать код закрытия и открытия ордеров на новой свече после пересечения линии канала.
Советнику прописал торговлю по пересечения линий все делает, но хочется что бы он это делал на новой свече. нужен именно код. СПС!
Смотри реализацию алертов в индюках, используя время бара...
 

AlexeNP

Гуру форума
Помогите. не могу додумать код закрытия и открытия ордеров на новой свече после пересечения линии канала.
Советнику прописал торговлю по пересечения линий все делает, но хочется что бы он это делал на новой свече. нужен именно код. СПС!
ну, как вариант...
объявляем переменную
long lastbar_date; // будем в ней хранить время открытия последнего бара

внутри функции OnInit присвоим этой переменной значение
lastbar_date=SeriesInfoInteger(NULL,0,SERIES_LASTBAR_DATE);

теперь в OnStart добавляем условие нового бара

if(lastbar_date<SeriesInfoInteger(NULL,0,SERIES_LASTBAR_DATE))
{
//чего-то тут пересекается и закрывается
lastbar_date=SeriesInfoInteger(NULL,0,SERIES_LASTBAR_DATE);
}
 

Viktor73

Новичок форума
ну, как вариант...
объявляем переменную
long lastbar_date; // будем в ней хранить время открытия последнего бара

внутри функции OnInit присвоим этой переменной значение
lastbar_date=SeriesInfoInteger(NULL,0,SERIES_LASTBAR_DATE);

теперь в OnStart добавляем условие нового бара

if(lastbar_date<SeriesInfoInteger(NULL,0,SERIES_LASTBAR_DATE))
{
//чего-то тут пересекается и закрывается
lastbar_date=SeriesInfoInteger(NULL,0,SERIES_LASTBAR_DATE);
}
СПС! попробую.
 

блондинка

Элитный участник
такой вопрос или скорее сомнение,
есть стрелочный индикатор в закрытом коде с АlertMessage = true
соответственно постоянно и очень часто выскакивает баннер,
от этого индикатора работает советник параллельно на 22 парах,
ничего что это происходит? не мешает это работе советника?
не перегружает ли что либо в терминале MT4?
может скрипт какой есть что бы банер не маячил ?
что с этими пачками баннеров происходит?
 

sergeysv

Активный участник
Приветствую.
Имею проблему с горизонтальными линиями на пятом терминале.
Линия созданная вручную через кнопку на чарте GAZP отображается на чарте SBER так как у них цены похожие. Подскажите, пожалуйста , как и линию сохранить и чтоб показывала там где была создана.
preff=ChartSymbol( NULL);
price=SymbolInfoDouble(Symbol(),SYMBOL_BIDLOW);
ObjectCreate(0,preff+"hhh",OBJ_HLINE,0,0,price) ;

Не хочет ни в первом ни во втором варианте.....................

if(preff+"hhh" != ChartSymbol(0) ){
ObjectSetInteger(0,preff+"hhh",OBJPROP_COLOR,clrNONE); }

if(preff != ChartSymbol(NULL) ) {
ObjectSetInteger(0,preff+"hhh",OBJPROP_COLOR,clrNONE); }
 
Верх