haiduc Опубликовано 15 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 мая, 2015 Всем привет! Скачал курс и начал изучать. Спасибо огромное за уроки. Очень интересно! Ссылка на сообщение Поделиться на другие сайты More sharing options...
Dron15 Опубликовано 16 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 мая, 2015 Подскажите почему не хочет пичатать строку в терминале , вроде нет ошибок. /| Expert tick function функции выполняющиеся на каждом тике ДЗ 1 |//+------------------------------------------------------------------+ int Start (){ int x; // обьявляем переменную х так как тип int она имеет целочисленное значение bool bl; // bool имеет всего 2 значения true = правда false = лож string ctr = " урок 1"; // string позволяет написать некую информацию строкой x = 2; if(x == 0)bl = true; else bl = false; if(bl == true)ctr = ctr + " TradeLikeAPro forever..."; else ctr = ctr + " Insta must die!"; Print (ctr); Comment(ctr); Alert(ctr); return(0);}//+----------------------------------------------------- Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 16 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 мая, 2015 Dron15 не "пичатает" потому, что тиков нет - выходной сегодня. Перенеси код в OnInit и смотри... 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
GoodPointMas Опубликовано 17 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 мая, 2015 вот пользуюсь такой стандартной логикой для вычисления лота через процент от рискавсе хорошо работает скажем на AUDUSD, с $770 = 0.6 lot , или EURJPG но для GBPUSD выдает ошибку "Not Enough Money"есть идеи почему? extern double Depo = 0;extern double RiskPercent = 80;extern double Lots = 0;extern int Magic = 113355;extern int Slippage = 3;extern double StopLoss = 100;extern double TakeProfit = 50;int OnInit() { if(Digits==3 || Digits ==5) { TakeProfit*=10; StopLoss*=10; Slippage *=10; CandelSize *=10; } return(INIT_SUCCEEDED); }void OnTick(){ .... point=MarketInfo(pairs[MaxIndex],MODE_POINT); dig=MarketInfo(pairs[MaxIndex],MODE_DIGITS); Lots=GetLots(pair); //SELL SL=NormalizeDouble(CurrentPriceAsk+StopLoss*point,dig); TP=NormalizeDouble(CurrentPriceBid-TakeProfit*point,dig); OrderSend(pair, OP_SELL, Lots,CurrentPriceBid, Slippage, SL,TP,"Sell",Magic,0,Blue) //BUY SL=NormalizeDouble(CurrentPriceBid-StopLoss*point,dig); TP=NormalizeDouble(CurrentPriceAsk+TakeProfit*point,dig); OrderSend(pair,OP_BUY, Lots, CurrentPriceAsk,Slippage, SL,TP,"Buy",Magic,0,Green)} double GetLots(string pair) { double pipValue = MarketInfo(pair,MODE_TICKVALUE); double lot=0; if (Depo==0) Depo=AccountFreeMargin(); lot=NormalizeDouble(Depo*RiskPercent/100.0/StopLoss/pipValue,2); return lot; } Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 17 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 мая, 2015 Так на фунтобаксе залог вдвое больше нужен, вот вам на открытие ордера и не хватает денег.Просто прямо делите текущие курс фунта на курс кенгуру - и видите насколько больше нужен залог.К коду бота это не имеет никакого отношение.А просто перевести сообщение "Not Enough Money" никак не судьба?! :) 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
GoodPointMas Опубликовано 17 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 мая, 2015 Так на фунтобаксе залог вдвое больше нужен, вот вам на открытие ордера и не хватает денег.Просто прямо делите текущие курс фунта на курс кенгуру - и видите насколько больше нужен залог.К коду бота это не имеет никакого отношение.А просто перевести сообщение "Not Enough Money" никак не судьба?! :) я понимаю что значит эта фраза, вопрос в том почему тот же самый скрипт и логика работает на других парахда если уменьшить риск все работаетвопрос в том как сделать универсальный скрипт для расчета лота для любой пары Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 18 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 мая, 2015 http://ubr.ua/labor-market/education/kursami-syt-ne-budesh-chto-nujno-znat-prejde-chem-zapisatsia-na-it-kursy-340272Так, для общего понимания темы программирования... Ссылка на сообщение Поделиться на другие сайты More sharing options...
HighInv Опубликовано 19 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 мая, 2015 Тоже хочу написать универсальный расчет лота в зависимости от SL, но пока застрял с расчетом стоимости 1 пункта..Подскажите, как рассчитать стоимость 1 пункта не зная объем лота? В тех формулах, которые я нашел берется зависимость от лота. Ссылка на сообщение Поделиться на другие сайты More sharing options...
alex198 Опубликовано 19 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 мая, 2015 Здравствуйте. Подскажите пожалуйста,почему инд. в терминале отображается, а в тестере нет? Пишет: zero divide in 'FOREX INVINCIBLE SIGNAL~.mq4' (290,60) Вроде обычный стрелочник. FOREX_INVINCIBLE_SIGNAL~.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 19 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 мая, 2015 alex198 там деление на 0, поэтому не запускается. Вот пробуй, эту ошибку исправил, но не факт, что она последняя...FOREX_INVINCIBLE_SIGNAL-.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 19 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 мая, 2015 HighInv размер лота, это не то, что Вы думаете, это размер стандартного лота брокера = 100000 ед.валюты счёта (у норм. брокеров)MarketInfo(NULL, MODE_LOTSIZE) - Это размер лота для Вашего счётаMarketInfo(NULL, MODE_TICKVALUE) - это то, что Вам нужно 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
HighInv Опубликовано 20 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 мая, 2015 HighInv размер лота, это не то, что Вы думаете, это размер стандартного лота брокера = 100000 ед.валюты счёта (у норм. брокеров)MarketInfo(NULL, MODE_LOTSIZE) - Это размер лота для Вашего счётаMarketInfo(NULL, MODE_TICKVALUE) - это то, что Вам нужно Да, пока еще не разобрался, много чепухи в голове...MODE_TICKVALUE - это стоимость 1 пункта в валюте депозита, т.е. заниматься дополнительным переводом, скажем для GPBCAD не нужно? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sany2912 Опубликовано 20 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 мая, 2015 Здравствуйте!Друзья, кто знает способы, как можно написать код так, чтоб при убыточном закрытии ордера (любого направления) следующий открывался с увеличенным лотом? Ссылка на сообщение Поделиться на другие сайты More sharing options...
voldemar227 Опубликовано 20 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 мая, 2015 Здравствуйте!Друзья, кто знает способы, как можно написать код так, чтоб при убыточном закрытии ордера (любого направления) следующий открывался с увеличенным лотом? Для этого нужно по истории перебрать ордера и найти последний затем вернуть его профит и если профит меньше нуля то вернуть лот//+------------------------------------------------------------------+datetime time=0; double profit=0,lots=0;for(int i=OrdersHistoryTotal()-1; i>=0; i--) if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) if(OrderSymbol()==_Symbol) if(OrderMagicNumber()==MagicNumber || MagicNumber==-1) if(OrderCloseTime()>time) // находим последний в истории ордер { time=OrderCloseTime(); // запомним время profit=OrderProfit(); // запомним профит his_lt=OrderLots(); // запомним лот }if(profit lots=his_lt*2; // Увеличим в два раза//+------------------------------------------------------------------+ Изменено 20 мая, 2015 пользователем voldemar227 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sany2912 Опубликовано 20 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 мая, 2015 Спойлер Здравствуйте!Друзья, кто знает способы, как можно написать код так, чтоб при убыточном закрытии ордера (любого направления) следующий открывался с увеличенным лотом? Для этого нужно по истории перебрать ордера и найти последний затем вернуть его профит и если профит меньше нуля то вернуть лот//+------------------------------------------------------------------+datetime time=0; double profit=0,lots=0;for(int i=OrdersHistoryTotal()-1; i>=0; i--) if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) if(OrderSymbol()==_Symbol) if(OrderMagicNumber()==MagicNumber || MagicNumber==-1) if(OrderCloseTime()>time) // находим последний в истории ордер { time=OrderCloseTime(); // запомним время profit=OrderProfit(); // запомним профит his_lt=OrderLots(); // запомним лот }if(profit lots=his_lt*2; // Увеличим на два//+------------------------------------------------------------------+ Точно!!!! Спасибо!!! )))))) Изменено 20 мая, 2015 пользователем Pavel888 Ссылка на сообщение Поделиться на другие сайты More sharing options...
alex198 Опубликовано 20 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 мая, 2015 alex198 там деление на 0, поэтому не запускается. Вот пробуй, эту ошибку исправил, но не факт, что она последняя...Спасибо большое. Но всё равно не работает. Т.е. на график ставишь-стрелки на прошедших свечах появляются, а на новых нет. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 20 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 мая, 2015 alex198 там деление на 0, поэтому не запускается. Вот пробуй, эту ошибку исправил, но не факт, что она последняя...Спасибо большое. Но всё равно не работает. Т.е. на график ставишь-стрелки на прошедших свечах появляются, а на новых нет.Такой индюк - криво написан. >:d Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 20 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 мая, 2015 HighInv Не нужно. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Gleb Опубликовано 29 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 мая, 2015 Делаю д.з. к 6-му уроку.Открыл в ручную две позиции:1. eurusd -> buy2. audjpy -> sellЗапускаю скрипт, чтобы открыть отложенные ордера. По Евро ничего не срабатывает. По Ауди/ейна открывается стоп, но по цене открытой позиции.В журнале пусто. Пытался найти ошибку через Print(), но почему-то упорно Print тоже не работает!?Подскажите, где ошибка? Защитные_отложенные_ордера.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
voldemar227 Опубликовано 29 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 мая, 2015 Делаю д.з. к 6-му уроку.Открыл в ручную две позиции:1. eurusd -> buy2. audjpy -> sellЗапускаю скрипт, чтобы открыть отложенные ордера. По Евро ничего не срабатывает. По Ауди/ейна открывается стоп, но по цене открытой позиции.В журнале пусто. Пытался найти ошибку через Print(), но почему-то упорно Print тоже не работает!?Подскажите, где ошибка? Там Валом ошибок//+------------------------------------------------------------------+//| Защитные отложенные ордера.mq4 |//| Copyright 2015, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright "Copyright 2015, MetaQuotes Software Corp."#property link "https://www.mql5.com"#property version "1.00"#property strict#property script_show_inputsextern int pointForOrder = 500;extern int Slippage = 5;extern string Symbol_A="EURUSD";extern string Symbol_B="AUDJPY";extern double volume=0.01;double open,pfo,price=0;int digits,point;//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+void OnStart() { int b_a=0,s_a=0,b_b=0,s_b=0; for(int i=OrdersTotal()-1; i>=0; i--) if(OrderSelect(i,SELECT_BY_POS)) { if(OrderSymbol()==Symbol_A) { if(OrderType()==OP_BUYSTOP) b_a++; if(OrderType()==OP_SELLLIMIT) s_a++; } if(OrderSymbol()==Symbol_B) { if(OrderType()==OP_BUYSTOP) b_b++; if(OrderType()==OP_SELLLIMIT) s_b++; } } double point_a=MarketInfo(Symbol_A,MODE_POINT); int digits_a=(int)MarketInfo(Symbol_A,MODE_DIGITS); double point_b=MarketInfo(Symbol_B,MODE_POINT); int digits_b=(int)MarketInfo(Symbol_B,MODE_DIGITS); if(b_a==0) { pfo=NormalizeDouble(pointForOrder*point_a,digits_a); price=NormalizeDouble(MarketInfo(Symbol_A,MODE_ASK),digits_a); open=NormalizeDouble(price+pfo,digits_a); Comment(price," ",pfo); if(OrderSend(Symbol_A,OP_BUYSTOP,volume,open,Slippage,0,0)>=0) Print("Успешно по символу ",Symbol_A); else Print("Ошибка по символу ",Symbol_A," ",GetLastError()); } if(s_a==0) { pfo=NormalizeDouble(pointForOrder*point_a,digits_a); price=NormalizeDouble(MarketInfo(Symbol_A,MODE_BID),digits_a); open=NormalizeDouble(price+pfo,digits_a); if(OrderSend(Symbol_A,OP_SELLLIMIT,volume,open,Slippage,0,0)>=0) Print("Успешно по символу ",Symbol_A); else Print("Ошибка по символу ",Symbol_A," ",GetLastError()); } }//+------------------------------------------------------------------+ Ссылка на сообщение Поделиться на другие сайты More sharing options...
Gleb Опубликовано 29 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 мая, 2015 Там Валом ошибок Спасибо за отклик.Исправил несколько ошибок: Нормализовал pfo, поставил условие на OrderSend.Начал думать, как сделать условие на проверку уже установленных отложенных ордеров, т.к. у вас в коде строго прописаны только 2 пары.Но сначала решил проверить код, т.к. повторно выставлять отложенные ордера не стал бы.Ничего не изменилось. Опять на Евро ничего не происходит, а Ауди/йена выставляется по цене открытия уже установленного ордера.В Журнале снова никаких следов Print'а.Запустил ваш код.Почему цена отсчитывается от Ask и Bid? Нам же нужно считать от цены открытия ордера?Зачем открывать два отложенных противоположно направленных ордера?Сработало только на Евро. В Журнале тоже никаких следов Print'a.Защитные_отложенные_ордера.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
voldemar227 Опубликовано 29 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 мая, 2015 Там Валом ошибок Спасибо за отклик.Исправил несколько ошибок: Нормализовал pfo, поставил условие на OrderSend.Начал думать, как сделать условие на проверку уже установленных отложенных ордеров, т.к. у вас в коде строго прописаны только 2 пары.Но сначала решил проверить код, т.к. повторно выставлять отложенные ордера не стал бы.Ничего не изменилось. Опять на Евро ничего не происходит, а Ауди/йена выставляется по цене открытия уже установленного ордера.В Журнале снова никаких следов Print'а.Запустил ваш код.Почему цена отсчитывается от Ask и Bid? Нам же нужно считать от цены открытия ордера?Зачем открывать два отложенных противоположно направленных ордера?Сработало только на Евро. В Журнале тоже никаких следов Print'a. Ну вы же объяснили чего хотите так ведь ? Если объяснили то пожалуйста покажите то что Вы хотите получить в итоге... Ссылка на сообщение Поделиться на другие сайты More sharing options...
Gleb Опубликовано 29 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 мая, 2015 Ну вы же объяснили чего хотите так ведь ? Если объяснили то пожалуйста покажите то что Вы хотите получить в итоге... Не совсем понимаю, как можно показать то, что не получается :)Как я понял из задания:Открыты ордера без стопов и тейк-профитов. Скрипт позволяет открыть защитные отложенные ордера (Sell-limit/buy-Stop) на любых парах, где уже открыты ордера без стопов.Без задания, для себя: Выводить те или иные сообщения в журнал (например, выставлен защитные ордер или произошла ошибка). До этого урока, когда писал советников, в этом не возникало сложности. А вот для скрипта почему-то не получается записывать в журнал :( Ссылка на сообщение Поделиться на другие сайты More sharing options...
voldemar227 Опубликовано 29 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 мая, 2015 Ну вы же объяснили чего хотите так ведь ? Если объяснили то пожалуйста покажите то что Вы хотите получить в итоге... Не совсем понимаю, как можно показать то, что не получается :)Как я понял из задания:Открыты ордера без стопов и тейк-профитов. Скрипт позволяет открыть защитные отложенные ордера (Sell-limit/buy-Stop) на любых парах, где уже открыты ордера без стопов.Без задания, для себя: Выводить те или иные сообщения в журнал (например, выставлен защитные ордер или произошла ошибка). До этого урока, когда писал советников, в этом не возникало сложности. А вот для скрипта почему-то не получается записывать в журнал :( А как же вы селлимитами собираетесь защититься ?ТЗ какое ?ну есть на франке бай и что мы ему лепить то будем бай стоп ? селл стоп? Бай лимит что ? 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Gleb Опубликовано 29 мая, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 мая, 2015 А как же вы селлимитами собираетесь защититься ?ТЗ какое ?ну есть на франке бай и что мы ему лепить то будем бай стоп ? селл стоп? Бай лимит что ? Точно!!! Спасибо! Нам на бае Селл-стоп нужен. А у меня Селл-лимит.Осталось два вопроса:1. Отложенный ордер открывается на уровне открытия существующего ордера, а нужно чтобы к нему что-то добавлялось/отнималось (в моем коде это pointForOrder).2. Почему не срабатывает Print?Защитные_отложенные_ордера.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти