6 минут назад, 0ll_ сказал:awals я просил файл, который Вы получаете с сервера, можно в виде текста. Мы же в нём будем данные искать
Понял.
От xbms, 13 апреля, 2013 в Уголок Программиста
6 минут назад, 0ll_ сказал:awals я просил файл, который Вы получаете с сервера, можно в виде текста. Мы же в нём будем данные искать
Понял.
Всем привет! Будьте добры посмотрите пожалуйста на индикатор и подскажите или поправьте, почему у меня не получается данные по буферам получить.
Здравствуйте. В советнике необходимо , чтоб ордера открывались только на открытии бара ( М15 ).
if( timepref==Time[0])return ;
int timeprev=Time[0];
maprice=iMA(0,0,MaPeriod,MaShift,MODE_EMA,PRICE_CLOSE,1);
if(CountBuy()==0 && Bid>maprice )
{
ticket= OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"",Magic,0,Blue);
Открываются , почему то не только на открытии бара, но и в середине бара ( например в 10.07 ), если предыдущий ордер закрылся...
Что не так , не пойму.
Изменено 3 июля, 2019 пользователем batmanuyga
5 часов назад, batmanuyga сказал:Здравствуйте. В советнике необходимо , чтоб ордера открывались только на открытии бара ( М15 ).
if( timepref==Time[0])return ;
int timeprev=Time[0];maprice=iMA(0,0,MaPeriod,MaShift,MODE_EMA,PRICE_CLOSE,1);
if(CountBuy()==0 && Bid>maprice )
{
ticket= OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"",Magic,0,Blue);
Открываются , почему то не только на открытии бара, но и в середине бара ( например в 10.07 ), если предыдущий ордер закрылся...
Что не так , не пойму.
Данная переменная int timeprev; должна быть глобальной, т.е. находиться за пределами функции void OnTick() и тп.
Ну и конструкция должна быть немного иной.
if (timeprev != Time[0]) {
maprice=iMA(0,0,MaPeriod,MaShift,MODE_EMA,PRICE_CLOSE,1);
if (CountBuy()==0 && Bid>maprice) {
ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"",Magic,0,Blue);
timeprev = Time[0];
}
}
Изменено 3 июля, 2019 пользователем Ent
awals , файл состоит из повторяющихся структур = {"time1":1562086800,"time2":1562090400,"price_sell":1.127,"price_buy":1.132,"sell_stop":2.5604,"buy_stop":2.5266}
разделённых ",". В MQL есть функция StringSplit, которая разделяет строку на подстроки и записывает в массив, разделяющим символом предлагаю сделать "{".
Функция вернёт размер массива, берём последнюю запись [n-1] и опять засовываем в StringSplit, только с разделителем ",".
Полученный массив по строчно анализируем и записываем в переменные.
Вот пример работы StringSplit:
string strArr[];
ValueCount = StringSplit( strURL, StringGetCharacter("{",0), strArr);
5 часов назад, batmanuyga сказал:if( timepref==Time[0])return ;
int timeprev=Time[0];
Если код скопирован из советника, то у Вас опечатка в имени переменной timepref(v)
Изменено 3 июля, 2019 пользователем usver73
4 часа назад, 0ll_ сказал:awals , файл состоит из повторяющихся структур = {"time1":1562086800,"time2":1562090400,"price_sell":1.127,"price_buy":1.132,"sell_stop":2.5604,"buy_stop":2.5266}
разделённых ",". В MQL есть функция StringSplit, которая разделяет строку на подстроки и записывает в массив, разделяющим символом предлагаю сделать "{".
Функция вернёт размер массива, берём последнюю запись [n-1] и опять засовываем в StringSplit, только с разделителем ",".
Полученный массив по строчно анализируем и записываем в переменные.
Вот пример работы StringSplit:
string strArr[];
ValueCount = StringSplit( strURL, StringGetCharacter("{",0), strArr);
Спасибо, но ни черта не понял, первый массив получил, а как дальше так и не понял.
Как выбрать последнею запись, как последний массив записать в переменные.
13 часов назад, awals сказал:Как выбрать последнею запись
18 часов назад, 0ll_ сказал:
Функция вернёт размер массива, берём последнюю запись [n-1]
считываем в переменную типа string значение последней записи
string LastLine = strArr[n-1],
где n- размер массива strArr.
и дальше
18 часов назад, 0ll_ сказал:и опять засовываем в StringSplit, только с разделителем ",".
string strArr2[];
ValueCount2 = StringSplit( LastLine, StringGetCharacter(",",0), strArr2);
13 часов назад, usver73 сказал:
считываем в переменную типа string значение последней записи
string LastLine = strArr[n-1],
где n- размер массива strArr.
и дальшеstring strArr2[];
ValueCount2 = StringSplit( LastLine, StringGetCharacter(",",0), strArr2);
Огромное спасибо, всё получилось и ещё вопрос, а как можно добиться чтобы не толка последняя записи была, а например последние 5 записей?
8 минут назад, awals сказал:а как можно добиться чтобы не толка последняя записи была, а например последние 5 записей?
организуйте цикл, типа
for(int i=ArraySize(strArr)-6;i<ArraySize(strArr);i++) { // здесь получаете значение из массива и обрабатываете как было раньше расписано string LastLine = strArr[i]; int ValueCount2 = StringSplit( LastLine, StringGetCharacter(",",0), strArr2); }
В 04.07.2019 в 19:52, usver73 сказал:организуйте цикл, типа
for(int i=ArraySize(strArr)-6;i<ArraySize(strArr);i++) { // здесь получаете значение из массива и обрабатываете как было раньше расписано string LastLine = strArr[i]; int ValueCount2 = StringSplit( LastLine, StringGetCharacter(",",0), strArr2); }
Добрый день, подскажите если какие-нибудь путные Книги по обучению MQL4? Или может вы порекомендуете.
6 часов назад, awals сказал:подскажите если какие-нибудь путные Книги по обучению MQL4?
Уровень-то у Вас не начальный - книг для продвинутых не встречал, в основном справкой пользуемся...
Если индикатор получился, может опубликуете на форуме? Думаю многим полезно будет.
1 час назад, 0ll_ сказал:Уровень-то у Вас не начальный - книг для продвинутых не встречал, в основном справкой пользуемся...
Если индикатор получился, может опубликуете на форуме? Думаю многим полезно будет.
Вот в этом и дело почему ищу Книгу, Уровень у меня начинающий это мой первый Индикатор, который пробую паписта.
А вот сам Индикатор ну или что получилось.не судите учусь.
Подскажите зеленому как правильно расписать цикл for() для следующей задачки:
if(allbuyprofit<-AccountBalance()*LockTrigger/100)OrderSend(Symbol(),OP_SELL,LockLotSell,Bid,3,sl,tp," ",MagicLockSell,0,Pink);
нужно открытие лока не только при достижении процента просадки LockTrigger, но и повторные при достижении любой кратной просадки (1, 2, 3, 4 и т.д.)*LockTrigger.
Подскажите как написать, чтобы в терминалы отображались значки открытых ордеров на основе скрипта
for(int i=0;i<OrdersHistoryTotal();i++) { OrderSelect(i,SELECT_BY_POS,MODE_HISTORY); if(OrderSymbol()!=Symbol()||OrderType()>1)continue; name=OrderTicket(); color col=SellColor; if(OrderType()==0)col=BuyColor; datetime a = OrderOpenTime(); double b = OrderOpenPrice(); datetime c = OrderCloseTime(); double d = OrderClosePrice(); datetime f; ObjectCreate(name+"T",OBJ_ARROW,0,a,b); ObjectSet(name+"T",OBJPROP_COLOR,col); // - цвет ObjectSet(name+"T",OBJPROP_ARROWCODE,1); // - стрелка вправо ObjectCreate(name+"F",OBJ_ARROW,0,c,d); ObjectSet(name+"F",OBJPROP_COLOR,col); // - цвет ObjectSet(name+"F",OBJPROP_ARROWCODE,3); // - стрелка влево y=NormalizeDouble( OrderProfit() + OrderCommission() + OrderSwap(), 2); f = c+5*PeriodSeconds(PERIOD_CURRENT); ObjectCreate(name+"L",OBJ_TEXT,0,f,(d+35*Point)); ObjectSetText(name+"L",DoubleToString(y,2)+"$",10,"Tahoma",LabelColor); x=x+y; }
Изменено 7 июля, 2019 пользователем NightTraider
12 часов назад, kudinoff сказал:нужно открытие лока не только при достижении процента просадки LockTrigger, но и повторные при достижении любой кратной просадки (1, 2, 3, 4 и т.д.)*LockTrigger
Прости, не понятно, объясни по-шагово откуда возникнет просадка х2 х3 ... на залокированных ордерах?
В любом случае это решается не циклом, а формулой с коэффициентом кратности просадки int kfx = (int) MathFloor( AccountBalance() / allbuyprofit / ( LockTrigger / 100 ) );
потом на этот коэффициент умножаете лот локирующего ордера или дистанцию ТП - я не знаю как Вы торгуете и как будете лок раскрывать...
NightTraider по идее приведённый Вами код должен показать все закрытые ордера, в том числе ручные и открытые скриптом - в нём нет фильтрации по магику.
11 часов назад, NightTraider сказал:Подскажите как написать, чтобы в терминалы отображались значки открытых ордеров на основе скрипта
for(int i=0;i<OrdersHistoryTotal();i++) { OrderSelect(i,SELECT_BY_POS,MODE_HISTORY); if(OrderSymbol()!=Symbol()||OrderType()>1)continue; name=OrderTicket(); color col=SellColor; if(OrderType()==0)col=BuyColor; datetime a = OrderOpenTime(); double b = OrderOpenPrice(); datetime c = OrderCloseTime(); double d = OrderClosePrice(); datetime f; ObjectCreate(name+"T",OBJ_ARROW,0,a,b); ObjectSet(name+"T",OBJPROP_COLOR,col); // - цвет ObjectSet(name+"T",OBJPROP_ARROWCODE,1); // - стрелка вправо ObjectCreate(name+"F",OBJ_ARROW,0,c,d); ObjectSet(name+"F",OBJPROP_COLOR,col); // - цвет ObjectSet(name+"F",OBJPROP_ARROWCODE,3); // - стрелка влево y=NormalizeDouble( OrderProfit() + OrderCommission() + OrderSwap(), 2); f = c+5*PeriodSeconds(PERIOD_CURRENT); ObjectCreate(name+"L",OBJ_TEXT,0,f,(d+35*Point)); ObjectSetText(name+"L",DoubleToString(y,2)+"$",10,"Tahoma",LabelColor); x=x+y; }
Вот
4 часа назад, 0ll_ сказал:Прости, не понятно, объясни по-шагово откуда возникнет просадка х2 х3 ... на залокированных ордерах?
В любом случае это решается не циклом, а формулой с коэффициентом кратности просадки int kfx = (int) MathFloor( AccountBalance() / allbuyprofit / ( LockTrigger / 100 ) );
потом на этот коэффициент умножаете лот локирующего ордера или дистанцию ТП - я не знаю как Вы торгуете и как будете лок раскрывать...
Локирование частичное, поэтому дальнейший рост просадки возможен. Не понял, зачем лот умножать на коэффициент (с расчетом лотности как раз нет проблем).
int kfx = (int) MathFloor( AccountBalance() / allbuyprofit / ( LockTrigger / 100 ) ) выдаст абракадабру. Если имелась в виду именно кратность просадки тригеру, то правильнее MathFloor( allbuyprofit / AccountBalance() / ( LockTrigger / 100 ) )
Как в дальнейшем использовать kfx, чтобы открытие локов было однократным для каждого значения kfx (до тех пор, пока локирующий ордер, соответствующий этой кратности, не закрыт)?
Пока что все попытки приводят к хаотичному открытию ордеров.
4 часа назад, kudinoff сказал:Локирование частичное, поэтому дальнейший рост просадки возможен
Самый простой вариант это создать глобальную переменную (лучше на уровне терминала) kfz = 1;
и внести в Вашу формулу изменения:
if( allbuyprofit< -AccountBalance() *LockTrigger *kfz /100)
{ OrderSend(Symbol(),OP_SELL,LockLotSell,Bid,3,sl,tp," ",MagicLockSell,0,Pink); kfz++; }
После закрытия лока ( ну или слива ;) ) не забыть присвоить kfz = 1;
2 часа назад, 0ll_ сказал:kfz++
Не работает
14 часов назад, kudinoff сказал:16 часов назад, 0ll_ сказал:kfz++
Не работает
Сочувствую...
Оказалось ошибка тикета из-за которой он беспорядочно открывал ордера.
Изменено 10 июля, 2019 пользователем kudinoff
Ребята, привет!
Поделитесь пожалуйста хорошим обучающим курсом программирования mql4.
Ссылка на курс из форума не приходит на почту.
Спасибо!
15 минут назад, AdA сказал:Ребята, привет!
Поделитесь пожалуйста хорошим обучающим курсом программирования mql4.
Ссылка на курс из форума не приходит на почту.Спасибо!
Ссылка на онлайн и оффлайн версии курса курса
Здравствуйте, дорогой подписчик !
Посмотреть видеокурс "Форекс для чайников" вы можете двумя способами:
1) Онлайн версия
Доступна по ссылке:
http://tlap.io/wppage/videokurs-foreks-dlya-chaynikov/
А еще на сайте есть раздел посвященный Урокам по MQL, переходим к последней странице и от туда изучаем.
http://tlap.io/category/uroki-po-mql/
2) Оффлайн версия
Если вы предпочитаете более старомодный способ просмотра, вы можете скачать курс в виде отдельных видео-уроков в комплекте с оболочкой для запуска и наслаждаться просмотром, даже без участия интернета. Например где-то на даче, долгими зимними вечерами...)
Вот ваша ссылка на скачивание архива с видеокурсом "Форекс для Чайников":
https://hb.bizmrg.com/tlap-files/courses/Chainik2018.rar
Также вы можете скачать этот курс с торрент-трекера:
https://rutracker.net/forum/viewtopic.php?t=4126559
Изменено 10 августа, 2019 пользователем MikR0ReR
1 час назад, MikR0ReR сказал:Ссылка на онлайн и оффлайн версии курса курса
Здравствуйте, дорогой подписчик !
Посмотреть видеокурс "Форекс для чайников" вы можете двумя способами:
1) Онлайн версия
Доступна по ссылке:
http://tlap.io/wppage/videokurs-foreks-dlya-chaynikov/
А еще на сайте есть раздел посвященный Урокам по MQL, переходим к последней странице и от туда изучаем.
http://tlap.io/category/uroki-po-mql/
2) Оффлайн версия
Если вы предпочитаете более старомодный способ просмотра, вы можете скачать курс в виде отдельных видео-уроков в комплекте с оболочкой для запуска и наслаждаться просмотром, даже без участия интернета. Например где-то на даче, долгими зимними вечерами...)
Вот ваша ссылка на скачивание архива с видеокурсом "Форекс для Чайников":
https://hb.bizmrg.com/tlap-files/courses/Chainik2018.rar
Также вы можете скачать этот курс с торрент-трекера:
https://rutracker.net/forum/viewtopic.php?t=4126559
Нужен курс по программированию.
Нашел на другом источнике.
Спасибо!
Еще вопрос, подскажите пожалуйста, сколько потребуется времени (в часах, примерно) чтобы освоить программирование в объеме:
открытие и сопровождение советником сетки ордеров по сигналам торговой системы, учитывающей ATR и показатели выхода новостей по новостному календарю?
Для публикации сообщений создайте учётную запись или авторизуйтесь
Перейти к списку тем