А стрелки на каком баре появляются? Быть может не на нулевом, тогда пробуй первый, второй, третий.
Обучение языку MQL4 под MetaTrader 4📌
От xbms, 13 апреля, 2013 в Уголок Программиста
А стрелки на каком баре появляются? Быть может не на нулевом, тогда пробуй первый, второй, третий.
DmitriyFX
А стрелки на каком баре появляются? Быть может не на нулевом, тогда пробуй первый, второй, третий.
Пробовал 0 и 1. Появляется, поидее, на нулевом.
А всё, проблему решил. Оказалось, параметры не так ввёл.
Изменено 30 декабря, 2014 пользователем DmitriyFX
Всем привет!!!
Давно уже посматриваю на страничку
macd-ichimoku.narod.ru
Начнем с того что каких либо знаний в программировании нет, ну кроме паскаль ++ в мохнатом 10 классе... Решил я значит сесть и попробовать прочитать справочник по MQL - но увидев там 4к страниц понял что лучше оперативно пользоваться справкой.... и решать проблемы поступательными движениями... Нашел видео-урок по внедрению уже готовых сторонних индикаторов в код светника... Но и тут оказалось не все так просто, уроки эти мягко сказать староваты.
Скачал 5й терминал от альпари, дабы функция тестирования советников и их оптимизации там более привлекательна чем на 4м, запустил метаэдитор и начал писать....
Что не новая закорючка - так компилятор ругается, вобщем добрался я до исполнения сделок и тут сел окончательно... то что было ранее представлено OP_BUY или OP_SELL уже не воспринимаются... ,но с этим я разобрался ORDER_TYPE_BUY. Вопрос встал очень резко с Ask и Bid - не подсвечиваются. Так же ругается на Volume и OrderSend.
В общем такие вот пирожки... Голова уже квадратная. Просьба сильно не осуждать, поскольку только-только в самом начале пути... Из справки узнал что встроенные индикаторы можно подключать уже зарезервированными словами типа iIchimoku. Там возвращается какой то хэндл.... (кароче лес дремучий)
Ну и приложение сего мучения....
Буду очень признателен если направите в нужное русло!!!
PS если кому то интересно с какого видео урока пробовал учиться писать -
youtube.com/watch?v=3texhdfseR8&list=PLn1zelyYPatNAVcYDuMSd1BlzhRd51aH7&index=15
//+------------------------------------------------------------------+
//| EA_MACD+Ichimoku.mq5 |
//| XIIIth |
//|
//+------------------------------------------------------------------+
#property copyright "XIIIth"
#property link
#property version "1.00"
// Параметры из индикатора Ichimoku
input int Tenkan_sen=9;
input int Kijun_sen=26;
input int Senkou_Span_B=52;
// Параметры из индикатора MACD
input int Fast_EMA_period=12;
input int Slow_EMA_period=26;
input int Signal_SMA_period=9;
// Нулевой уровень индикатора MACD
input int Level0=0;
// Параметры Тейк Профит и Стоп Лосс
input int TakeProfit=10;
input int StopLoss=10;
// Выставление лота при совершении сделки
input double Lot=0.1;
// Магический номер
input int Magic=12345;
// Ввод переменных значений индикатора MACD
double Histo_MACD0,Histo_MACD1;
// Ввод переменных значений индикатора Ichimoku
double Line_Tenkan,Line_Kijun;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
// Приводим значения пунктов к единичному виду
double tp,sl;
// Значение в старых пунктах для 4х значных брокеров
if (_Digits==2||_Digits==4) {tp=TakeProfit*_Point;sl=StopLoss*_Point;}
// Значение в новых пунктах для 5ти значных брокеров
if (_Digits==3||_Digits==5) {tp=TakeProfit*10*_Point;sl=StopLoss*10*_Point;}
// Переносим индикаторы в советник
/*
Здесь Histo_MACD0 и Histo_MACD1 - один и тот же бар в индикаторе MACD
Только Histo_MACD0 - значение индикатора на предпоследней закрытой свече (с индексом 2), а
Histo_MACD1 - значение индикатора на последней закрытой свече (с индексом 1)
*/
Histo_MACD0=iCustom(NULL,0,"MACD",Fast_EMA_period,Slow_EMA_period,Signal_SMA_period,0,2);
Histo_MACD1=iCustom(NULL,0,"MACD",Fast_EMA_period,Slow_EMA_period,Signal_SMA_period,0,1);
Line_Tenkan=iCustom(NULL,0,"Ichimoku",Tenkan_sen,Kijun_sen,Senkou_Span_B,0,1);
Line_Kijun=iCustom(NULL,0,"Ichimoku",Tenkan_sen,Kijun_sen,Senkou_Span_B,1,1);
/*
Тут перед выпослением условий должно выполниться еще одно что каждый постапаюший тик
относится к последней свече...
if (OrdersTotal()==0&&Volume [0]==1)
*/
if (OrdersTotal()==0&&Volume [0]==1)
{
if (Histo_MACD1>Level0&&Histo_MACD0Line_Kijun&&Line_Tenkan==Line_Kijun) {OrderSend(Symbol(),ORDER_TYPE_BUY,Lot,Ask,200,Ask-sl,Ask+tp,NULL,Magic,0,CLR_NONE)}
/*Сюда передаем символ инструмента, тип ордера, объем,цена покупки, проскальзывание,
стоп лосс, тейк профит, комментарий,магический номер, дата экспирации и цвет*/
if (Histo_MACD1Level0&&Line_Tenkan }
return(INIT_SUCCEEDED);
}
Извиняюсь что не в тему немного, но на сколько я понял что уже особой разницы нет в кодировании для 5й и 4й версии...
Добрый день, и с новым годом всех!
_____________
Помогите, начал писать советник по стрелочному индикатору, помогите подправить код, у меня почему то открывает сделки только на BUY, на SELL сделок нет, + открывает позиции как то не по правилам не там где стрелочки, по ходу от балды, помогите кто чем может! И Если не трудно добавить функцию закрытия позиции при появлении противоположной стрелки и открытия новой по направлению стрелки.)
Индикатор MA_Crossover_Signal
Эксперт Strelo123
Спасибо заранее
Изменено 3 января, 2015 пользователем baksik99
МКЛ5 получше МКЛ4, но МТ5 распространён значительно хуже. Это всё-равно, что сесть на боллид F1, но при этом иметь возможность покататься только на спец. трассе...
baksik99 Пробуй
Изменено 3 января, 2015 пользователем 0ll
Сам мой код посмотри - вроде правильно работает.
baksik99 Возьми лучше моего бота для проверки стрелочных индюков, а то в твоём чего-то лень разбираться.
Сам мой код посмотри - вроде правильно работает.
Спасибо, щас буду разбираться!
На сколько я понял метаквоты уже изменили язык в метатрейдере 4м, и максимально приблизили к 5му. Почему именно выбрал 5й терминал - в силу специфики прогонов советника в тестере появилось куча дополнительной информации в виде различных графиков, что визуально уже помогает подобрать определенные параметры для советника. только из-за этого.
Если уж не получится скомпилить в 4м то подправить то всегда можно :)
Приветствую. Ребят помогите пожалуйста. Всю ночь не спал бился с метаэдитором, не осилил. Время уже почти обед, опускаются руки. Очень нужный индикатор, вот нашел его вчера. Индикатор строит горизонтальные линии по круглым ценам. Исправьте пожалуйста, что бы он строил до текущего бара, а не до конца графика.
p.s. всю ночь менял значения OBJ_HLINE на OBJ_TREND. писал Time[0]. Но упускаю наверное мелочь какую то. Помогите пожалуйста.
Добавлено: 04-01-2015 10:07:52
Не могу понять где в коде прописывать первую точку OBJ_TREND, сейчас одну точку прописал и получился штрих. как выровнять линии????

if (nm=="") nm=DoubleToStr(Time[0], 0);
if (p1 if (ObjectFind(nm) ObjectSet(nm, OBJPROP_RAY,0);
Изменено 4 января, 2015 пользователем Strong-Tezis
У Вас ошибка в этой строке:
double Max=iHigh(0,PERIOD_MN1,iHighest(NULL,PERIOD_MN1,MODE_HIGH,iBars(0,PERIOD_MN1),0));
поэтому и не работает. исправлю - выложу. позже
Спасибо Вам большое. Вы не могли бы потом объяснить мою ошибку. Хочу хоть немного научиться.
Привет всем!
Пишу сейчас советник, мучаюсь над логикой
С помощью статической переменной беру показания индикаторов и высчитываю уровни открытия ордеров раз в 4 часа
if (Hour() >= 00 && Hour() if (Hour() >= 04 && Hour() if (Hour() >= 08 && Hour() if (Hour() >= 12 && Hour() if (Hour() >= 16 && Hour() if (Hour() >= 20 ) time = 16;
static int flag;
static int newBar;
if (newBar != time)
{
newBar = time;
flag = 1;
}
и если
if (flag == 1)
{
(снимаем показания индикаторов и считаем уровни возможного открытия позиций)
}
Но так же мне нужно отслеживать положение цены относительно этих уровней на каждом тике (чтобы удалять отложки вовремя, например)
Сейчас код имеет такой вид:
double a,b;
if (a>b) deletesellstop();
if (flag == 1)
{(снимаем показания индикаторов и считаем уровни возможного открытия позиций)}
Вопрос такой: будут ли переменные a и b обнуляться при каждом тике, не сохраняя показаний индикатора, получаемых раз в 4 часа?
и если да, решит ли проблему приведение кода к такому виду:
if (flag == 1)
{double a = (вычисляем);
double b = (вычисляем);
}
if (a>b) deletesellstop();
Вычисляй значения индюков внутри этого (а то у Вас вычисление Н4 какие-то сложные):
static datetime newBar;
if (newBar != iTime(NULL,PERIOD_H4,0))
{
newBar = iTime(NULL,PERIOD_H4,0);
a = (вычисляем);
b = (вычисляем);
}
В этом случае использовать параметры а и б можно в любом месте.
то есть можно показания индюков записать в переменную типа static?
static double a = (вычисляем)
Ошибка самая элементарная - символ не 0, а NULL.
Но я ещё много там поправил:
- перенес код в Инит - зачем все эти флаги для одноразовой отрисовки уровней? Но линии двигаться не будут с новым баром. если хочешь, чтоб на каждом баре двигались надо переделывать.
- удаление линий переделал. как было у Вас делать нельзя. (лично с моего графика стер линии, нанесенные мной вручную)
- теперь рисует не от 0 а от исторического минимума - меньше графических объектов - лучше для терминала.
Читайте в справке "область видимости переменных".
Вычисляй значения индюков внутри этого (а то у Вас вычисление Н4 какие-то сложные):
static datetime newBar;
if (newBar != iTime(NULL,PERIOD_H4,0))
{
newBar = iTime(NULL,PERIOD_H4,0);
a = (вычисляем);
b = (вычисляем);
}
В этом случае использовать параметры а и б можно в любом месте.
Так у Вас и цена будет высчитываться раз в 4 часа , а не на каждом тике,как нужно!
Изменено 4 января, 2015 пользователем Konstebl
Спасибо. код не мой, его два программиста писали. Сейчас не компилирует, а после удаления ошибок виснет терминал. Вы не могли бы не менять сильно код, только подправить прошу Вас. Мне нужен свободный участок справа на графике, нужно просто что бы горизонтальные линии не шли до конца, а только до текущей свечи. уже голова взрывается, не могу такие казалось бы простые вещи сделать(( Я сделал что бы не шли линии до конца, так они под углом стали. Помогите пожалуйста.
Добавлено: 04-01-2015 15:33:23
зачеркнул красными крестиками, то что мешает.

Добавлено: 04-01-2015 15:41:46
В первом посте исходник (мною не испорченный). как я понял там в коде OBJ_HLINE(не имеет привязки по времени) нужно заменить на OBJ_TREND тогда получим что нужны две точки для привязки. Одну точку я кое как менял, а вторую не понимаю как((
Когда менял получался курсив вместо горизонтальных линий. Но зато курсив до текущей свечи :)) :))

Изменено 4 января, 2015 пользователем Strong-Tezis
? не понял. поясните Вашу мысль, "цена" - это что? Бид/Аск?
Так у Вас и цена будет высчитываться раз в 4 часа , а не на каждом тике,как нужно!
Спасибо Вам огромное за помощь и за то что всегда поддерживаете. Кстати мне пошло на пользу, что я сначала не разобрался)) Сделал сам, что хотел)) Оцените? (учтите я очень слаб в mql)
вот что правил\ if (ObjectFind(nm) ObjectSet(nm, OBJPROP_BACK, 1);
ObjectSet(nm, OBJPROP_RAY, 0);
Добавлено: 04-01-2015 17:23:35
Вот что получилось))

Изменено 4 января, 2015 пользователем Strong-Tezis
Но так же мне нужно отслеживать положение цены относительно этих уровней на каждом тике (чтобы удалять отложки вовремя, например)
Какую цену он имеет ввиду я не знаю.
Я предположил,что
a -- это значения индикаторов (раз в 4-е часа)
b -- это значение текущей цены (наверно Ask/Bid)
или нет?
Изменено 5 января, 2015 пользователем Konstebl
Но так же мне нужно отслеживать положение цены относительно этих уровней на каждом тике (чтобы удалять отложки вовремя, например)
Какую цену он имеет ввиду я не знаю.
Я предположил,что
a -- это значения индикаторов (раз в 4-е часа)
b -- это значение текущей цены (наверно Ask/Bid)
или нет?
Верно, только а и б наоборот
Значит я не въехал... Я думал, что а и б это значения индикатора (может на разных барах). Если из них что-то является ценой и нуждается в проверке на каждом тике, то, естественно, эту проверку надо выносить из блока if (Н4).
Для публикации сообщений создайте учётную запись или авторизуйтесь
Перейти к списку тем