Обсуждение статьи "Пошаговое руководство по написанию советников в MQL5 для начинающих" - страница 15
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Нашел уникальный, простой до гениальности, "способ трейлинга" советника, самого автора, который, как уже традиционно для этой разработки, так и не исполняется так, как автор прокомментировал. Он, как и я, видимо тоже чайник, но большой) Обещал, при развороте цены, ранее открытая позиция закрывается, ну да, вот было бы здорово, если бы было бы... а вот только висят две открытые позиции, в обе стороны и не закрываются. Ранее, до Вашего первого совета, вообще сыпало в обе стороны целыми градами открытых позиций, которые не закрывались. Попробуйте дожать, эту вишенку на торте ?
Здравствуйте, Рустам! Чтобы мы могли дальше продуктивно сотрудничать, Вам сначала необходимо научиться прикреплять к сообщению код советника с проблемами. Если у Вас при тестировании советника есть проблемы, то нужно этот код сохранить под новым именем, скомпилировать, а потом прикрепить к сообщению. Сохранять советник под новым именем и компилировать нужно обязательно!!! Иначе мы с Вами при общении запутаемся в разных вариантах.
Если по какой-то причине у Вас не получается прикрепить код советника, можете использовать другой способ:
Если Вы не научитесь прикреплять или размещать в своих сообщениях код советника с проблемами, то дальнейший диалог с Вами становится бесполезным.
С уважением, Владимир.
Здравствуйте, Рустам! Чтобы мы могли дальше продуктивно сотрудничать, Вам сначала необходимо научиться прикреплять к сообщению код советника с проблемами. Если у Вас при тестировании советника есть проблемы, то нужно этот код сохранить под новым именем, скомпилировать, а потом прикрепить к сообщению. Сохранять советник под новым именем и компилировать нужно обязательно!!! Иначе мы с Вами при общении запутаемся в разных вариантах.
Если по какой-то причине у Вас не получается прикрепить код советника, можете использовать другой способ:
Если Вы не научитесь прикреплять или размещать в своих сообщениях код советника с проблемами, то дальнейший диалог с Вами становится бесполезным.
С уважением, Владимир.
Извините за задержку, за выходные выгорел, сутками, но нашел причину последней проблемы, как оказалось брокер FXopen, просто не дорос до MT5. Ну и научили меня простоте выбора файлов, к отсылке. Первые два Ваша оптимизация труда автора, где Вы прекратили авторскую невнимательность в коде, с массированным открыванием позиций, вместо одной, единственной, вторые два его декларации закрытия позиции при развороте цены. Во втором стоит поработать, все таки автор, если и не доделал, но хотел прибыльно)
Извините за задержку, за выходные выгорел, сутками, но нашел причину последней проблемы, как оказалось брокер FXopen, просто не дорос до MT5. Ну и научили меня простоте выбора файлов, к отсылке. Первые два Ваша оптимизация труда автора, где Вы прекратили авторскую невнимательность в коде, с массированным открыванием позиций, вместо одной, единственной, вторые два его декларации закрытия позиции при развороте цены. Во втором стоит поработать, все таки автор, если и не доделал, но хотел прибыльно)
Ну с этим, последним, пока разбираюсь, пытаюсь хоть что то понять и начать в нем ориентироваться, пока к подстраховке длинных тейкпрофитов. Я уже готов к сюрпризам автора в дальнейшем, дорогу осилит идущий)
Ну с этим, последним, пока разбираюсь, пытаюсь хоть что то понять и начать в нем ориентироваться, пока к подстраховке длинных тейкпрофитов. Я уже готов к сюрпризам автора в дальнейшем, дорогу осилит идущий)
Здравствуйте, Рустам! Внизу сообщения прикрепляю рабочий вариант этого советника. Изменения коснулись данного участка кода:
Было добавлено то, что выделено желтым цветом,:
&& PositionsTotal()==0
а также удалено условие, связанное с Buy_opened и Sell_opened:
С уважением, Владимир.
Здравствуйте, Рустам! Внизу сообщения прикрепляю рабочий вариант этого советника. Изменения коснулись данного участка кода:
Было добавлено то, что выделено желтым цветом,:
а также удалено условие, связанное с Buy_opened и Sell_opened:
С уважением, Владим
Здравствуйте, Рустам! Внизу сообщения прикрепляю рабочий вариант этого советника. Изменения коснулись данного участка кода:
Было добавлено то, что выделено желтым цветом,:
а также удалено условие, связанное с Buy_opened и Sell_opened:
С уважением, Владимир.
Здравствуйте Владимир ! Прикрепленный файл почему то не работает, буду пытаться вставить Ваши коды, в советник, поглядим.
С Уважением, Рустам.
Заработал в тестере, просто что то видать обновилось опять с операционной системой и вставил просто классически, без своих тут местнических особенностей) Глядим.Здравствуйте Владимир ! Прикрепленный файл почему то не работает, буду пытаться вставить Ваши коды, в советник, поглядим.
С Уважением, Рустам.
Здравствуйте, Рустам! Проверил файл советника на двух разных терминалах. Всё работает. Это видно на нижней картинке. Попробуйте запустить визуальное тестирование и зайти во вкладку Журнал. Если будут сообщения с красными кружочками, то копируйте и размещайте здесь на форуме.
С уважением, Владимир.
Здравствуйте, Рустам! Проверил файл советника на двух разных терминалах. Всё работает. Это видно на нижней картинке. Попробуйте запустить визуальное тестирование и зайти во вкладку Журнал. Если будут сообщения с красными кружочками, то копируйте и размещайте здесь на форуме.
С уважением, Владимир.
Здравствуйте Владимир ! Ваш файл заработал, в тестере, просто что то видать обновилось опять с моей операционной системой и вставил просто классически, без своих тут местнических особенностей) Глядим.
И в демо заработал) Теперь оптимизирую, весьма экстремально)
С Уважением, Рустам.
Здравствуйте Владимир ! Ваш файл заработал, в тестере, просто что то видать обновилось опять с моей операционной системой и вставил просто классически, без своих тут местнических особенностей) Глядим.
С Уважением, Рустам.
Исходя из личного опыта, могу выделить главное в самообучении языку MQL5:
Исходя из личного опыта, могу выделить главное в самообучении языку MQL5:
Все понял, согласен с Вами 100%, читаю все Ваши материалы, что нашел и вместе с обращениями к справочнику MQL5, поглядываю на опубликованные курсы С++. Авторы MQL5 высказывались о применении в своей программе терминала МТ5, еще одного языка Python, видимо ради его (весьма медленного) "сумасшедших", в последнее время скоростей, фантастика, но с этим не скоро. После понимания, что брокер FXopen отстал от новостей МТ5 и потому создавались ошибки, не выполнял строчку класса MQL5, убрал его из комплекта своих брокеров, наблюдаю пока за остальными, есть на форуме подобные разборки форумчан и еще по брокерам. Но стало ясно, что самое время обновить все, что осталось от прошлых навыков и добавить немалые, как я понял, новости, и с терминалом, и с редактором. Припас на будущее онлайн компилятор С++, и с ним протестим редактор терминала МТ5. В первую очередь хочется разобраться с подстраховкой огромных тейкпрофитов оптимизированного советника, трейлингом или по авторской декларации закрывать позиции после разворота цены. Все свое программирование строю от необходимого сейчас, если советник заработает, по крупному, а он заработает, лучшей стратегии алгоритма, я пока не встречал, а на рынке со времен еще МТ3) но тогда все постижение огромного MQL5, целиком, который от C++, видимо бессмысленно ? Неплохо работает справочник F1. Прошу простить за длинный спич)
Нашел ручной трейлинг, прямо на графике, смотрю поползет ли за ценой ? Ведь это не стоплосс.
СПАСИБО ВАМ !
С Уважением, Рустам.
здравствуйте, сразу хочу предупредить что я новичок так что не ругайтесь сильно если что)
хотел создать советник через генератор (и вроде бы всё нормально но есть одно но)
хотелось бы чтобы сделка открывалась не сразу после закрытия предыдущей а например через одну свечу,
пробовал что-то писать но в итоге выдаёт ошибку.
Может кто-нибудь с этим помочь ну или указать что за ошибка и как её исправить?
а вот собственно код:
//+------------------------------------------------------------------+
//| ParExpert.mq5 |
//| Copyright 2022, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
//+------------------------------------------------------------------+
//| Include |
//+------------------------------------------------------------------+
#include <Expert\Expert.mqh>
//--- available signals
#include <Expert\Signal\SignalSAR.mqh>
//--- available trailing
#include <Expert\Trailing\TrailingFixedPips.mqh>
//--- available money management
#include <Expert\Money\MoneyFixedLot.mqh>
//+------------------------------------------------------------------+
//| Inputs |
//+------------------------------------------------------------------+
//--- inputs for expert
input string Expert_Title = "ParExpert"; // Document name
ulong Expert_MagicNumber = 24195; //
bool Expert_EveryTick = false; //
//--- inputs for main signal
input int Signal_ThresholdOpen = 10; // Signal threshold value to open [0...100]
input int Signal_ThresholdClose = 0; // Signal threshold value to close [0...100]
input double Signal_PriceLevel = 0.0; // Price level to execute a deal
input double Signal_StopLevel = 500; // Stop Loss level (in points)
input double Signal_TakeLevel = 70; // Take Profit level (in points)
input int Signal_Expiration = 4; // Expiration of pending orders (in bars)
input double Signal_SAR_Step = 0.02; // Parabolic SAR(0.02,0.2) Speed increment
input double Signal_SAR_Maximum = 0.2; // Parabolic SAR(0.02,0.2) Maximum rate
input double Signal_SAR_Weight = 0.6; // Parabolic SAR(0.02,0.2) Weight [0...1.0]
//--- inputs for trailing
input int Trailing_FixedPips_StopLevel = 0; // Stop Loss trailing level (in points)
input int Trailing_FixedPips_ProfitLevel= 10; // Take Profit trailing level (in points)
//--- inputs for money
input double Money_FixLot_Percent = 10.0; // Percent
input double Money_FixLot_Lots = 0.1; // Fixed volume
//--- inputs for trade cooldown
input int Expert_TradeCooldown = 1; // Cooldown period between trades (in bars)
//+------------------------------------------------------------------+
//| Global expert object |
//+------------------------------------------------------------------+
CExpert ExtExpert;
//+------------------------------------------------------------------+
//| Initialization function of the expert |
//+------------------------------------------------------------------+
int OnInit()
{
//--- Initializing expert
if (!ExtExpert.Init(Symbol(), Period(), Expert_EveryTick, Expert_MagicNumber))
{
//--- failed
printf(__FUNCTION__ + ": error initializing expert");
ExtExpert.Deinit();
return (INIT_FAILED);
}
//--- Creating signal
CExpertSignal *signal = new CExpertSignal;
if (signal == NULL)
{
//--- failed
printf(__FUNCTION__ + ": error creating signal");
ExtExpert.Deinit();
return (INIT_FAILED);
}
//---
ExtExpert.InitSignal(signal);
signal.ThresholdOpen(Signal_ThresholdOpen);
signal.ThresholdClose(Signal_ThresholdClose);
signal.PriceLevel(Signal_PriceLevel);
signal.StopLevel(Signal_StopLevel);
signal.TakeLevel(Signal_TakeLevel);
signal.Expiration(Signal_Expiration);
//--- Creating filter CSignalSAR
CSignalSAR *filter0 = new CSignalSAR;
if (filter0 == NULL)
{
//--- failed
printf(__FUNCTION__ + ": error creating filter0");
ExtExpert.Deinit();
return (INIT_FAILED);
}
signal.AddFilter(filter0);
//--- Set filter parameters
filter0.Step(Signal_SAR_Step);
filter0.Maximum(Signal_SAR_Maximum);
filter0.Weight(Signal_SAR_Weight);
//--- Creation of trailing object
CTrailingFixedPips *trailing = new CTrailingFixedPips;
if (trailing == NULL)
{
//--- failed
printf(__FUNCTION__ + ": error creating trailing");
ExtExpert.Deinit();
return (INIT_FAILED);
}
//--- Add trailing to expert (will be deleted automatically))
if (!ExtExpert.InitTrailing(trailing))
{
//--- failed
printf(__FUNCTION__ + ": error initializing trailing");
ExtExpert.Deinit();
return (INIT_FAILED);
}
//--- Set trailing parameters
trailing.StopLevel(Trailing_FixedPips_StopLevel);
trailing.ProfitLevel(Trailing_FixedPips_ProfitLevel);
//--- Creation of money object
CMoneyFixedLot *money = new CMoneyFixedLot;
if (money == NULL)
{
//--- failed
printf(__FUNCTION__ + ": error creating money");
ExtExpert.Deinit();
return (INIT_FAILED);
}
//--- Add money to expert (will be deleted automatically))
if (!ExtExpert.InitMoney(money))
{
//--- failed
printf(__FUNCTION__ + ": error initializing money");
ExtExpert.Deinit();
return (INIT_FAILED);
}
//--- Set money parameters
money.Percent(Money_FixLot_Percent);
money.Lots(Money_FixLot_Lots);
//--- Check all trading objects parameters
if (!ExtExpert.ValidationSettings())
{
//--- failed
ExtExpert.Deinit();
return (INIT_FAILED);
}
//--- Tuning of all necessary indicators
if (!ExtExpert.InitIndicators())
{
//--- failed
printf(__FUNCTION__ + ": error initializing indicators");
ExtExpert.Deinit();
return (INIT_FAILED);
}
//--- Initialize last trade time variable
datetime lastTradeTime = 0;
ExtExpert.SetVariable("LastTradeTime", lastTradeTime);
//--- ok
return (INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Deinitialization function of the expert |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
ExtExpert.Deinit();
}
//+------------------------------------------------------------------+
//| "Tick" event handler function |
//+------------------------------------------------------------------+
void OnTick()
{
//--- Check time since last trade
datetime lastTradeTime = ExtExpert.GetVariable("LastTradeTime");
int cooldownBars = Bars - ExtExpert.GetBarShiftByTime(Symbol(), Period(), lastTradeTime);
if (cooldownBars < Expert_TradeCooldown)
{
//--- Trade cooldown period not elapsed, skip opening new trade
return;
}
ExtExpert.OnTrade();
}
//+------------------------------------------------------------------+
//| "Trade" event handler function |
//+------------------------------------------------------------------+
void OnTrade()
{
ExtExpert.OnTrade();
}
//+------------------------------------------------------------------+
//| "Timer" event handler function |
//+------------------------------------------------------------------+
void OnTimer()
{
ExtExpert.OnTimer();
}
//+------------------------------------------------------------------+