Перейти к содержанию

Доработка советников: общая тема


Рекомендуемые сообщения

  • Ответов 2,5k
  • Создано
  • Последний ответ

Популярные авторы

Популярные авторы

Популярные посты

Версия с правками. Я немного свернул код, чтобы не перебирались ордера попусту и чтобы проверка красной/синей зоны делалась в одном месте. Прогнал в тесте с настройками по умолчанию. Ожидаемо лье

Перейти

Нате 1_2_3 _Fraktal.mq4

Перейти

Система маятника, или попрыгунчика, или фиг ее знает как ее еще назвать не намного младше сетки мартингейла. Мы в далеком 2017 писали по ней сов с индикатором на вход: https://tlap.com/forum/labo

Перейти
Доработка советников: общая тема Опубликовано


ребята кто может впишите в сова закрытия но проценту прибыли для регулировки профита



По проценту от чего? Баланса, эквити, свободных средств, средств зарезервированных по проценту от баланса........и т.д.?
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано



ребята кто может впишите в сова закрытия но проценту прибыли для регулировки профита



По проценту от чего? Баланса, эквити, свободных средств, средств зарезервированных по проценту от баланса........и т.д.?


по проценту от баланса
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

по проценту от баланса



Если по простому и без всяких проверок, то можно так. Ищем сумму по проценту от баланса - это раз. Контролируем общий профит по всем открытым позициям в валюте депозита - два. Сравниваем текущий профит в деньгах и профит от баланса - три. Если текущий профит превысил профит от баланса - закрываемся.

Проверяйте, пожалуйста :d

2019-03-12_23-10-04.jpg
Martin-SAR_mod.ex4
Martin-SAR_mod.mq4

  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано



по проценту от баланса




Если по простому и без всяких проверок, то можно так. Ищем сумму по проценту от баланса - это раз. Контролируем общий профит по всем открытым позициям в валюте депозита - два. Сравниваем текущий профит в деньгах и профит от баланса - три. Если текущий профит превысил профит от баланса - закрываемся.

Проверяйте, пожалуйста :d

если можно при пробитии параболика чтоб выстовлял сеть ордеров в обе стороны по 3 с умножением
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Здравствуйте!

Прошу помощи.
Пытаюсь написать советник с графической панелью для отображения и дальнейшего учета различного рода паттернов на истории.
Нечто подобное у меня есть, как индикатор, но в целом - очень неудобно.

К сожалению, советники пока новая для меня территория. Сама проблема:

В OnInit() создается глобальная переменная GlobalVariable, в ней учитываются клики на созданные кнопки "плюс" и кнопку "минус",
меняющие объявленную в начале int-овую глобальную переменную BarShift=0, отображаемую в созданном OBJ_EDIT;

Переменная GlobalVariable создается. Ее видно через F3. Клики по кнопкам учитывает - значения свои меняет.
Показания BarShift в "Поле ввода" OBJ_EDIT также, синхронно меняются.

Проблема: я не могу "прочитать" эту переменную GlobalVariable в теле void функции, ограниченной циклом for(int i=0; iчтобы потом использовать это значение.
Контроль появления нужного значения ведется через Print() и дополнительное окно на панели.

Запускаю советник - все работает, например, кнопкой "Минус" довожу значение BarShift c 0 до (-5). GlobalVariable через F3 тоже равна (-5).
Но в "окне" и на Print() = 0....

Но если вызвать "Свойства" этого, уже запущенного советника, и закрыть их (Свойства), то во вкладке "Эксперты" терминала видно,
что Print()= тоже (-5) и "окно" отображает (-5), чего я и добивался.

Получается, что глобальные переменные GV не такие уж и глобальные (
Прошу помощи у настоящих программистов.
Спасибо

EA_GV_Forum.mq4

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано


Здравствуйте!

Прошу помощи.
Пытаюсь написать советник с графической панелью для отображения и дальнейшего учета различного рода паттернов на истории.
Нечто подобное у меня есть, как индикатор, но в целом - очень неудобно.

К сожалению, советники пока новая для меня территория. Сама проблема:

В OnInit() создается глобальная переменная GlobalVariable, в ней учитываются клики на созданные кнопки "плюс" и кнопку "минус",
меняющие объявленную в начале int-овую глобальную переменную BarShift=0, отображаемую в созданном OBJ_EDIT;

Переменная GlobalVariable создается. Ее видно через F3. Клики по кнопкам учитывает - значения свои меняет.
Показания BarShift в "Поле ввода" OBJ_EDIT также, синхронно меняются.

Проблема: я не могу "прочитать" эту переменную GlobalVariable в теле void функции, ограниченной циклом for(int i=0; iчтобы потом использовать это значение.
Контроль появления нужного значения ведется через Print() и дополнительное окно на панели.

Запускаю советник - все работает, например, кнопкой "Минус" довожу значение BarShift c 0 до (-5). GlobalVariable через F3 тоже равна (-5).
Но в "окне" и на Print() = 0....

Но если вызвать "Свойства" этого, уже запущенного советника, и закрыть их (Свойства), то во вкладке "Эксперты" терминала видно,
что Print()= тоже (-5) и "окно" отображает (-5), чего я и добивался.

Получается, что глобальные переменные GV не такие уж и глобальные (
Прошу помощи у настоящих программистов.
Спасибо



Здравствуйте!

Вы вызываете эту функцию ( void GetSignal() ) только в OnInit(), а OnInit() при запуске советника "обрабатывается" только один раз, в том числе и Ваши дополнительные функции. Можно долго рассуждать...но проблема решается легко.

Просто Вашу функцию void GetSignal() "засуньте" еще в исполняющую функцию onTime, как добавили в OnInit() - GetSignal(i); // генерация и подсчет паттернов

И помните OnInit() выполняется только ОДИН раз при перезапуске\запуске советника!!! Т.е . Ваши циклы и массивы там практически бесполезны)))

Если будет не понятно, обращайтесь, "разжую" :d
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Спасибо.
"Засовывал" я void GetSignal() в OnTimer().. Да, описанной проблемы тогда нет. Но и ограничения истории тоже уже нет. Идет постоянная подгрузка.
Что очень замедляет, затрудняет процесс анализа. Последующего.
В предложенном мной варианте, по всей вероятности, придется отказаться от "красивостей", хотя они очень удобны.. И вводить необходимый сдвиг баров вручную
через "Свойства" советника..
Работать с dll я не умею

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано


Спасибо.
"Засовывал" я void GetSignal() в OnTimer().. Да, описанной проблемы тогда нет. Но и ограничения истории тоже уже нет. Идет постоянная подгрузка.
Что очень замедляет, затрудняет процесс анализа. Последующего.
В предложенном мной варианте, по всей вероятности, придется отказаться от "красивостей", хотя они очень удобны.. И вводить необходимый сдвиг баров вручную
через "Свойства" советника..
Работать с dll я не умею



Для реализации Вашей задумки не нужны глобальные переменные, а можно использовать простые int и когда Вы работаете внутри советника (пользуетесь советников) использовать int (счетчики). Глобальные Вам понадобятся только для того, чтобы подхватить исторические параметры настроек. Т.е. в функцию, например, Delete записываете все параметры Вашей панели в глобальные переменные при выключении\перезагрузки советника, а при очередном включении советника "подхватывать" старые параметры через функцию OnInit() и через записанные глобальные переменные. Потом присвоить обычным переменным значения глобальных и внутри работать уже с обычными переменными. Быстро и надежно.

Если что пишите в личку. Разберем эту ситуацию, а результат выложите потом сюда как итог беседы....
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
Цитата

а результат выложите потом сюда как итог беседы....



Здравствуйте!

Главная проблема решена. Советник, в его реализованной части, работает.

Из-за помещения цикла в тело OnTimer() появилась "винчестерная" особенность, для пересчета паттернов необходимо кликнуть на любой участок панели.
Пусть это будет фичей.

Благодарю за помощь

EA_Forum_UPD.mq4

  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Пробую написать советник по стандартному индикатору МТ4 "Ichimoku Kinko Hyo".

Случайно никто не в курсе, почему зеленая линия "Chikou Span" не имеет значений при выведении её показателей таким вот образом:

double Chikou_Span;
Chikou_Span = iCustom(NULL, 0, "Ichimoku", InpTenkan, InpKijun, InpSenkou, 4, 0);


Если прописать "Chikou_Span" в алерт, то алерт выведет значение "0.0".

Может кто подскажет в чем тут секрет? (если таким образом выводить значения других линий индикатора, то они выводятся без проблем).

Изменено пользователем Ved
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано


Пробую написать советник по стандартному индикатору МТ4 "Ichimoku Kinko Hyo".

Случайно никто не в курсе, почему зеленая линия "Chikou Span" не имеет значений при выведении её показателей таким вот образом:

double Chikou_Span;
Chikou_Span = iCustom(NULL, 0, "Ichimoku", InpTenkan, InpKijun, InpSenkou, 4, 0);


Если прописать "Chikou_Span" в алерт, то алерт выведет значение "0.0".

Может кто подскажет в чем тут секрет? (если таким образом выводить значения других линий индикатора, то они выводятся без проблем).



Я, думаю, этот буфер выдает значение только со смещением, не на нулевом баре как у Вас указано. Выложите индикатор, гляну.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Я, думаю, этот буфер выдает значение только со смещением, не на нулевом баре как у Вас указано. Выложите индикатор, гляну.



Добрый день. Вот сам индикатор:

Спойлер


//+------------------------------------------------------------------+
//| Ichimoku.mq4 |
//| Copyright 2005-2014, MetaQuotes Software Corp. |
//| http://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright "2005-2014, MetaQuotes Software Corp."
#property link "http://www.mql4.com"
#property description "Ichimoku Kinko Hyo"
#property strict

#property indicator_chart_window
#property indicator_buffers 7
#property indicator_color1 Red // Tenkan-sen
#property indicator_color2 Blue // Kijun-sen
#property indicator_color3 SandyBrown // Up Kumo
#property indicator_color4 Thistle // Down Kumo
#property indicator_color5 Lime // Chikou Span
#property indicator_color6 SandyBrown // Up Kumo bounding line
#property indicator_color7 Thistle // Down Kumo bounding line
//--- input parameters
input int InpTenkan=9; // Tenkan-sen
input int InpKijun=26; // Kijun-sen
input int InpSenkou=52; // Senkou Span B
//--- buffers
double ExtTenkanBuffer[];
double ExtKijunBuffer[];
double ExtSpanA_Buffer[];
double ExtSpanB_Buffer[];
double ExtChikouBuffer[];
double ExtSpanA2_Buffer[];
double ExtSpanB2_Buffer[];
//---
int ExtBegin;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
void OnInit(void)
{
IndicatorDigits(Digits);
//---
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtTenkanBuffer);
SetIndexDrawBegin(0,InpTenkan-1);
SetIndexLabel(0,"Tenkan Sen");
//---
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtKijunBuffer);
SetIndexDrawBegin(1,InpKijun-1);
SetIndexLabel(1,"Kijun Sen");
//---
ExtBegin=InpKijun;
if(ExtBegin ExtBegin=InpTenkan;
//---
SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_DOT);
SetIndexBuffer(2,ExtSpanA_Buffer);
SetIndexDrawBegin(2,InpKijun+ExtBegin-1);
SetIndexShift(2,InpKijun);
SetIndexLabel(2,NULL);
SetIndexStyle(5,DRAW_LINE,STYLE_DOT);
SetIndexBuffer(5,ExtSpanA2_Buffer);
SetIndexDrawBegin(5,InpKijun+ExtBegin-1);
SetIndexShift(5,InpKijun);
SetIndexLabel(5,"Senkou Span A");
//---
SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_DOT);
SetIndexBuffer(3,ExtSpanB_Buffer);
SetIndexDrawBegin(3,InpKijun+InpSenkou-1);
SetIndexShift(3,InpKijun);
SetIndexLabel(3,NULL);
SetIndexStyle(6,DRAW_LINE,STYLE_DOT);
SetIndexBuffer(6,ExtSpanB2_Buffer);
SetIndexDrawBegin(6,InpKijun+InpSenkou-1);
SetIndexShift(6,InpKijun);
SetIndexLabel(6,"Senkou Span B");
//---
SetIndexStyle(4,DRAW_LINE);
SetIndexBuffer(4,ExtChikouBuffer);
SetIndexShift(4,-InpKijun);
SetIndexLabel(4,"Chikou Span");
//--- initialization done
}
//+------------------------------------------------------------------+
//| Ichimoku Kinko Hyo |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
int i,k,pos;
double high_value,low_value;
//---
if(rates_total return(0);
//--- counting from 0 to rates_total
ArraySetAsSeries(ExtTenkanBuffer,false);
ArraySetAsSeries(ExtKijunBuffer,false);
ArraySetAsSeries(ExtSpanA_Buffer,false);
ArraySetAsSeries(ExtSpanB_Buffer,false);
ArraySetAsSeries(ExtChikouBuffer,false);
ArraySetAsSeries(ExtSpanA2_Buffer,false);
ArraySetAsSeries(ExtSpanB2_Buffer,false);
ArraySetAsSeries(open,false);
ArraySetAsSeries(high,false);
ArraySetAsSeries(low,false);
ArraySetAsSeries(close,false);
//--- initial zero
if(prev_calculated {
for(i=0; i ExtTenkanBuffer=0.0;
for(i=0; i ExtKijunBuffer=0.0;
for(i=0; i {
ExtSpanA_Buffer=0.0;
ExtSpanA2_Buffer=0.0;
}
for(i=0; i {
ExtSpanB_Buffer=0.0;
ExtSpanB2_Buffer=0.0;
}
}
//--- Tenkan Sen
pos=InpTenkan-1;
if(prev_calculated>InpTenkan)
pos=prev_calculated-1;
for(i=pos; i {
high_value=high;
low_value=low;
k=i+1-InpTenkan;
while(k {
if(high_value high_value=high[k];
if(low_value>low[k])
low_value=low[k];
k++;
}
ExtTenkanBuffer=(high_value+low_value)/2;
}
//--- Kijun Sen
pos=InpKijun-1;
if(prev_calculated>InpKijun)
pos=prev_calculated-1;
for(i=pos; i {
high_value=high;
low_value=low;
k=i+1-InpKijun;
while(k {
if(high_value high_value=high[k];
if(low_value>low[k])
low_value=low[k];
k++;
}
ExtKijunBuffer=(high_value+low_value)/2;
}
//--- Senkou Span A
pos=ExtBegin-1;
if(prev_calculated>ExtBegin)
pos=prev_calculated-1;
for(i=pos; i {
ExtSpanA_Buffer=(ExtKijunBuffer+ExtTenkanBuffer)/2;
ExtSpanA2_Buffer=ExtSpanA_Buffer;
}
//--- Senkou Span B
pos=InpSenkou-1;
if(prev_calculated>InpSenkou)
pos=prev_calculated-1;
for(i=pos; i {
high_value=high;
low_value=low;
k=i+1-InpSenkou;
while(k {
if(high_value high_value=high[k];
if(low_value>low[k])
low_value=low[k];
k++;
}
ExtSpanB_Buffer=(high_value+low_value)/2;
ExtSpanB2_Buffer=ExtSpanB_Buffer;
}
//--- Chikou Span
pos=0;
if(prev_calculated>1)
pos=prev_calculated-1;
for(i=pos; i ExtChikouBuffer=close;
//---
return(rates_total);
}
//+------------------------------------------------------------------+

Изменено пользователем Ved
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Chikou_Span = iCustom(NULL, 0, "Ichimoku", InpTenkan, InpKijun, InpSenkou, 4, 0);



Сделайте так:
iCustom(NULL, 0, "Ichimoku", InpTenkan, InpKijun, InpSenkou, 4, InpKijun);

и будет Вам счастье :d

Происходит смешение на InpKijun баров. Изменено пользователем loveЦ
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Привет, помогите с написание простенького советника, хотя бы чтобы он открывал ордера по сигналу, и доливался так же по сигналу, любой тайм, далее буду сопровождать сделки уже руками.
http://tlap.com/forum/ugolok-programmista/13/napishu-sovetnik-dlya-mt4-po-vashemu-tekhzadaniyu/18926/?do=findComment&comment=421102

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

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

Samostoaytelno.mq4

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано


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


Здравствуйте! Если просто, то заводите переменную типа bool signalBuy= false (для сигнала Buy), если появился сигнал на покупку и signalBuy ==false, то открываем сделку и signalBuy=true. Как сделка закрылась signalBuy=false. Ждем нового сигнала. Тоже самое для Sell ( bool signalSell=false).
А так можно написать функцию подсчета ордеров и проверять количество открытых позиций по Buy и Sell. Если появился сигнал и нет открытых ордеров - открываем позицию.
if( есть сигнал Buy && TotalBuy()==0) вход
или
bool signalBuy==false; (объявить до всех функций)
if( есть сигнал Buy && signalBuy==false) вход
....
ордер закрылся signalBuy==true;

Первый способ универсальный и проще :)

PS/ Посмотрел код, у Вас вроде все прописано. А посмотреть как работает советник не могу -нет индикатора
Test у меня. Изменено пользователем loveЦ
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Мне нужна функция для советника, что бы он прекращал торговлю по индикаторам, после получения прибыли, а не входил на этом же тренде.

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано


Мне нужна функция для советника, что бы он прекращал торговлю по индикаторам, после получения прибыли, а не входил на этом же тренде.



Т.е. Вам нужно войти в сделку по тренду, как сделка закрылась, то открыться ТОЛЬКО по обратному тренду?
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

MikR0ReR в принципе мне уже попытался помочь, написал функцию, но у меня не хватает знаний её правильно вписать в сам советник. Вот ищу кто поможет.


datetime timeold;//старое время начала тренда
datetime timenew;//текущее время тренда
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
trendStart();//узнаем время начало тренда
if(timenew!=timeold)//проверяем, что начался новый тренд
{
//да, новый тренд начался
int ticket=OrderSend(NULL,OP_BUY,0.1,Ask,3,0,0);
if(ticket>0) timeold=timenew;//ордер открыт, считаем тренд отработан
}
}
//+------------------------------------------------------------------+
void trendStart()//узнаем время начала тренда
{
for(int i=0;i {
//для восходящего тренда
if(iMA(NULL,0,13,0,0,0,i)>iMA(NULL,0,20,0,0,0,i) && iMA(NULL,0,13,0,0,0,i+1) {
timenew=Time;//определили время начала сигнала
break;
}
//для нисходящего тренда
if(iMA(NULL,0,13,0,0,0,i)iMA(NULL,0,20,0,0,0,i+1))
{
timenew=Time;//определили время начала сигнала
break;
}
}
}


Добавлено: 21-03-2019 15:50:17



Мне нужна функция для советника, что бы он прекращал торговлю по индикаторам, после получения прибыли, а не входил на этом же тренде.



Т.е. Вам нужно войти в сделку по тренду, как сделка закрылась, то открыться ТОЛЬКО по обратному тренду?


Да Вы правы.

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Добрый день, помогите плиз, советник в новом билде перестал открывать ордера на БАЙ, в 1090 работал нормально.

Sniper_EA-Trail.mq4

  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Здравствуйте loveЦ! Вы мне вчера здорово помогли, всё работает! У меня к Вам ещё один вопрос. Я изучал урок по подключению индикаторов через "iCastom", но столкнулся с индикатором без буферов или я, что-то не понимаю. На форуме советовали перенести индикатор в советник, но как это делается я понятия не имею. Может Вы, что посоветуете.Заранее спасибо.

Signal_Bars_v3_Daily.mq4

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано


Здравствуйте loveЦ! Вы мне вчера здорово помогли, всё работает! У меня к Вам ещё один вопрос. Я изучал урок по подключению индикаторов через "iCastom", но столкнулся с индикатором без буферов или я, что-то не понимаю. На форуме советовали перенести индикатор в советник, но как это делается я понятия не имею. Может Вы, что посоветуете.Заранее спасибо.


Здравствуйте! Рад помочь :)
Хочу поправить сразу - iCustom. И несмотря в код индикатора сразу могу сказать, если по скорому, то Ваша проблема решается или добавлением буферов в индикатор или вписать код индикатора в советник. Здесь кому как удобней. Я предпочитаю код индикатора вписывать в советник при условии если индикатор не "тяжелый"

И уже посмотрев код индикатора, могу сказать, что в Вашем случае лучше вставить в советник код. Надо понять какие сигналы Вам нужны из этого индикатора(их там аж 21 шт в одну сторону и 21 шт в другую) Изменено пользователем loveЦ
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

  • idinesh changed the title to Assae Elite Pro tlap version source code need i have plan convert this mt4 to mt5 and it possible mt4 dll file modified mt5 version
  • Pavel888 pinned this тема

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Специальное предложение


  • ×
    ×
    • Создать...