#1579

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

Martin-SAR_mod.mq413 скач.

#1580


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



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



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



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


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

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



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

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

2019-03-12_23-10-04.jpg
Martin-SAR_mod.ex420 скач.
Martin-SAR_mod.mq425 скач.

#1583



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




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

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

если можно при пробитии параболика чтоб выстовлял сеть ордеров в обе стороны по 3 с умножением
#1584

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

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

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

В 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.mq47 скач.

#1585


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

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

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

В 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
#1586

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

#1587


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



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

Если что пишите в личку. Разберем эту ситуацию, а результат выложите потом сюда как итог беседы....
#1588

Ну свет забрезжил..
Спасибо.

Буду разбираться

#1589
Цитата

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



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

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

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

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

EA_Forum_UPD.mq418 скач.

#1590

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

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

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


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

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

Изменено 19 марта, 2019 пользователем Ved

#1591


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

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

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


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

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



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

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



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

Спойлер


//+------------------------------------------------------------------+
//| 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);
}
//+------------------------------------------------------------------+

Изменено 19 марта, 2019 пользователем Ved

#1593

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



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

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

Происходит смешение на InpKijun баров.

Изменено 20 марта, 2019 пользователем loveЦ

#1594

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

#1595

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

Samostoaytelno.mq47 скач.

#1596


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


Здравствуйте! Если просто, то заводите переменную типа 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 у меня.

Изменено 21 марта, 2019 пользователем loveЦ

#1597

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

#1598


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



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

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



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



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


Да Вы правы.

#1600

Попробуйте так. Сделал просто, с помощью "якорей" :)

Samostoaytelno.mq418 скач.

#1601

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

Sniper_EA-Trail.mq411 скач.

#1602

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

Signal_Bars_v3_Daily.mq410 скач.

#1603


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


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

И уже посмотрев код индикатора, могу сказать, что в Вашем случае лучше вставить в советник код. Надо понять какие сигналы Вам нужны из этого индикатора(их там аж 21 шт в одну сторону и 21 шт в другую)

Изменено 22 марта, 2019 пользователем loveЦ

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

Перейти к списку тем
Форум · 2.0.20260627.0025