Подскажите, пожалуйста, как при программировании на MQL5 использовать метод void Ignore(long value) { m_ignore=value; } стандартного класса CExpertSignal в пользовательском классе Трейлинга? Как к нему получить доступ?
У меня пользовательский класс сигналов дает методы открытия и закрытия позиций. Но в трейлинге я хотел вести сопровождение позиции по другому методу. Если просто отдельно написать пользовательские классы MySignal и MyTrailing, то закрытие позиции происходит по тому условию, которое сработало первым. Если условия Trailing сработало раньше, то все хорошо. Но иногда поступает новый (реверсный) сигнал от MySignal и позиция переворачивается, а мне после открытия нужно, чтобы она сопровождалась именно трейлингом, не закрывалась и новая не открывалась. Я посмотрел базовые классы и есть ощущение, что за это отвечает m_ignore из базового класса сигналов. Если ему присвоить значение 1 в соответствующем фильтре, то видимо будет работать как надо. Я добавил в класс эксперта в OnInit filter0.Ignore(0). Но я новичок в ООП и никак не пойму, как в классе MyTrailing, который не наследуется от класса CExpertSignal, а является его "кузеном"? поменять это значение (условно так filter0.Ignore(1) ). Подскажите, пожалуйста, как это сделать.
Собственно говоря, более общий вопрос: как передавать информацию между двумя классами, не являющимися наследниками? Как передать информацию из класса трейлинга в класс сигналов? Наверное можно создать глобальную переменную и общаться через нее. Но это выглядит совсем извращенно относительно логики защищенных членов в ООП.
Помогите пожалуйста кто-нибудь! Уже попробовал отойти от встроенного Ignore (что, конечно само по себе не хорошо, люди его старались включали в базовый код) и все-равно никак состыковать не могу. Третьи сутки мучаюсь изобретаю (учебника-то нет).
Уже даже коды классов подправил: ввел в классе MySignal защищенный булевый член (m_permition) и метод Set к нему создал, в лонгкондишн и шоткондишн заправил return(0) если !m_permition. В MyTrailing тоже создал защищенный булевый член m_signal_permition, к нему создал методы Get и Set, научил ЧекТрейлинги им управлять if(position==NULL) {m_signal_permition = true; return(false);} else m_signal_permition = false;
Не понимаю только одного, где и как мне их свести. Пробовал просто в OnTick на них ссылаться, не проходит.
Прочитал статью Владимира "Как научить ...". Вроде бы идея создания в пользовательском сигнале экземпляр еще одного сигнала и через него общаться понятная, но где-то у меня до конца не стыкуется: классы сигнала и трейлинга не наследуются друг от друга.
Здравствуйте коллеги. В котировках МТ5 помимо цены защиты некоторые данные, типа исторического спреда и проскальзывания(который по умолчанию везде одинаков и составляет 10 пятизначных пунктов).
Делая такой запрос после открытия позиции:
Print("Expert name: ",__FILE__,", Открыта поза Sell с магиком №: ",IntegerToString(m_trade.RequestMagic()),", Cпред ",SymbolInfoInteger(_Symbol,SYMBOL_SPREAD),
", Deviation ",IntegerToString(m_trade.RequestDeviation()));
Получаем такой ответ:
Правильно ли я понимаю, что тестер МТ5 считает как спред так и проскальзывание вместе, ровно как в МТ4 я бы выставил вручную спред 13 пунктов, для конкретного примера в скриншоте.
Здравствуйте, пробую перенести индикаторы из MT4 в MT5. Есть простой индикатор, который отображает время до следующего бара. В индикаторе используется OnTimer. Обновление в OnTimer происходит через функцию void refreshClock(). Правильно ли использовать такую конструкцию для других индикаторов, требующих использование OnTimer? Или можно оптимизировать процесс обращения к OnTimer?
Помогите пожалуйста кто-нибудь! Уже попробовал отойти от встроенного Ignore (что, конечно само по себе не хорошо, люди его старались включали в базовый код) и все-равно никак состыковать не могу. Третьи сутки мучаюсь изобретаю (учебника-то нет).
Уже даже коды классов подправил: ввел в классе MySignal защищенный булевый член (m_permition) и метод Set к нему создал, в лонгкондишн и шоткондишн заправил return(0) если !m_permition. В MyTrailing тоже создал защищенный булевый член m_signal_permition, к нему создал методы Get и Set, научил ЧекТрейлинги им управлять if(position==NULL) {m_signal_permition = true; return(false);} else m_signal_permition = false;
Не понимаю только одного, где и как мне их свести. Пробовал просто в OnTick на них ссылаться, не проходит.
Прочитал статью Владимира "Как научить ...". Вроде бы идея создания в пользовательском сигнале экземпляр еще одного сигнала и через него общаться понятная, но где-то у меня до конца не стыкуется: классы сигнала и трейлинга не наследуются друг от друга.
Помогите, люди добрые, кто чем может.
Я за неделю продвинулся! Нашел в классе CExpert метод Signal. Вставил в OnTick код
Теперь если в скобках руками на "1" меняю, то метод Ingnore работает - советник сделки по сигналу не совершает.
Осталось только понять, как в OnTick получить информацию об объекте трейлинга. К сожалению, метода ExtExpert.Trailing() для получения ссылки на объект трейлинга нет и, следовательно, компилятор не понимает, к какому объекту я хочу применить свой реализованный в трейлинге метод GetPermition. Может все-таки кто-нибудь подскажет, как быть?
voidOnTick()
{
TimeCurrent(dt);
//--- Достаточно ли количество баров для работыif(Bars(_Symbol,_Period)<10) // общее количество баров на графике меньше 10?
{
Alert("На графике меньше 10 баров, советник не будет работать!!");
return;
}
//--- сначала нужно записать в массивы значения буферов индиктора Fractal//--- заполнение данными буфераArraySetAsSeries(Signal,true);
ArraySetAsSeries(Main,true);
if(CopyBuffer(Stochastic_handle,0,0,100,Main)<=0) return;
if(CopyBuffer(Stochastic_handle,1,0,100,Signal)<=0) return;
double Main_1=Main[1];
Main_1=NormalizeDouble(Main_1,5);
Print("Main_1=",DoubleToString(Main_1,5));
double Main_2=Main[2];
Main_2=NormalizeDouble(Main_2,5);
double Main_3=Main[3];
Main_3=NormalizeDouble(Main_3,5);
double Signal_1=Signal[1];
Signal_1=NormalizeDouble(Signal_1,5);
Print("Signal_1=",DoubleToString(Signal_1,5));
double Signal_2=Signal[2];
Signal_2=NormalizeDouble(Signal_2,5);
double Signal_3=Signal[3];
Signal_3=NormalizeDouble(Signal_3,5);
// Для сохранения значения времени бара мы используем static-переменную Old_Time.// При каждом выполнении функции OnTick мы будем сравнивать время текущего бара с сохраненным временем.// Если они не равны, это означает, что начал строится новый бар.staticdatetime Old_Time;
datetime New_Time[1];
bool IsNewBar=false;
// копируем время текущего бара в элемент New_Time[0]int copied=CopyTime(_Symbol,_Period,0,1,New_Time);
if(copied>0) // ok, успешно скопировано
{
if(Old_Time!=New_Time[0]) // если старое время не равно
{
IsNewBar=true; // новый барif(MQL5InfoInteger(MQL5_DEBUGGING)) Print("Новый бар",New_Time[0],"старый бар",Old_Time);
Old_Time=New_Time[0]; // сохраняем время бара
}
}
else
{
Alert("Ошибка копирования времени, номер ошибки =",GetLastError());
ResetLastError();
return;
}
// открытие покупок
if(Main_1>Signal_1&&Main_2<Signal_2&&Main_3<Signal_3&&Main_2<20)
{
if(IsNewBar!=false)
{
{
open_by_market();
}
}
}
// закрытие покупок if (Signal_3>80&&Signal_2>80&&Signal_1<80)
{
if(PositionsTotal()>0)
{
for(int i=0;i<PositionsTotal();i++)
{
ulong orders_ticket=PositionGetTicket(i);
if(((PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) ))
{ trade.PositionClose(orders_ticket); }
}
}
}
}
добрый день. уточните плз как реализовать две задачи ( на примере сигналов на покупку).
дано: точка входа - пересечение линий стохастика ниже 20
закрытие сделки - пересечение уровня 80 сверху вниз медленной линией стохастика
1 задача. чтобы при открытой позиции новая сделка открывалась бы когда цена выйдет за пределы некой дельты .т.е. не открывать несколько позиций на одном уровне как на прикрепленном рисунке
2 задача. чтобы закрытие было при втором, а не при первом пересечении уровня 80 сверху вниз медленной линией стохастика
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
добрый день. уточните плз как реализовать две задачи ( на примере сигналов на покупку).
дано: точка входа - пересечение линий стохастика ниже 20
закрытие сделки - пересечение уровня 80 сверху вниз медленной линией стохастика
1 задача. чтобы при открытой позиции новая сделка открывалась бы когда цена выйдет за пределы некой дельты .т.е. не открывать несколько позиций на одном уровне как на прикрепленном рисунке
2 задача. чтобы закрытие было при втором, а не при первом пересечении уровня 80 сверху вниз медленной линией стохастика
***
Пожалуйста, исправьте предоставленные вами данные.
Возможно причина в этом? Фотки кривые или тёмные или выполнены не по требованиям ...
В том и дело что нет, чтобы им стать, надо отредактировать. Замкнутый круг...
Ваша заявка на регистрацию в качестве Продавца отклонена модератором.
Пожалуйста, исправьте предоставленные вами данные.
Подскажите, пожалуйста, как при программировании на MQL5 использовать метод void Ignore(long value) { m_ignore=value; } стандартного класса CExpertSignal в пользовательском классе Трейлинга? Как к нему получить доступ?
У меня пользовательский класс сигналов дает методы открытия и закрытия позиций. Но в трейлинге я хотел вести сопровождение позиции по другому методу. Если просто отдельно написать пользовательские классы MySignal и MyTrailing, то закрытие позиции происходит по тому условию, которое сработало первым. Если условия Trailing сработало раньше, то все хорошо. Но иногда поступает новый (реверсный) сигнал от MySignal и позиция переворачивается, а мне после открытия нужно, чтобы она сопровождалась именно трейлингом, не закрывалась и новая не открывалась. Я посмотрел базовые классы и есть ощущение, что за это отвечает m_ignore из базового класса сигналов. Если ему присвоить значение 1 в соответствующем фильтре, то видимо будет работать как надо. Я добавил в класс эксперта в OnInit filter0.Ignore(0). Но я новичок в ООП и никак не пойму, как в классе MyTrailing, который не наследуется от класса CExpertSignal, а является его "кузеном"? поменять это значение (условно так filter0.Ignore(1) ). Подскажите, пожалуйста, как это сделать.
Собственно говоря, более общий вопрос: как передавать информацию между двумя классами, не являющимися наследниками? Как передать информацию из класса трейлинга в класс сигналов? Наверное можно создать глобальную переменную и общаться через нее. Но это выглядит совсем извращенно относительно логики защищенных членов в ООП.
Помогите пожалуйста кто-нибудь! Уже попробовал отойти от встроенного Ignore (что, конечно само по себе не хорошо, люди его старались включали в базовый код) и все-равно никак состыковать не могу. Третьи сутки мучаюсь изобретаю (учебника-то нет).
Уже даже коды классов подправил: ввел в классе MySignal защищенный булевый член (m_permition) и метод Set к нему создал, в лонгкондишн и шоткондишн заправил return(0) если !m_permition. В MyTrailing тоже создал защищенный булевый член m_signal_permition, к нему создал методы Get и Set, научил ЧекТрейлинги им управлять if(position==NULL) {m_signal_permition = true; return(false);} else m_signal_permition = false;
Не понимаю только одного, где и как мне их свести. Пробовал просто в OnTick на них ссылаться, не проходит.
Прочитал статью Владимира "Как научить ...". Вроде бы идея создания в пользовательском сигнале экземпляр еще одного сигнала и через него общаться понятная, но где-то у меня до конца не стыкуется: классы сигнала и трейлинга не наследуются друг от друга.
Помогите, люди добрые, кто чем может.
Здравствуйте коллеги. В котировках МТ5 помимо цены защиты некоторые данные, типа исторического спреда и проскальзывания(который по умолчанию везде одинаков и составляет 10 пятизначных пунктов).
Делая такой запрос после открытия позиции:
Получаем такой ответ:
Правильно ли я понимаю, что тестер МТ5 считает как спред так и проскальзывание вместе, ровно как в МТ4 я бы выставил вручную спред 13 пунктов, для конкретного примера в скриншоте.
Здравствуйте помогите пожалуйста кто нибудь ,как привязать советник мт5 к конкретному номеру счета ?
Здравствуйте помогите пожалуйста кто нибудь ,как привязать советник мт5 к конкретному номеру счета ?
Нужно проверять номер счёта. Делать это нужно в OnInit() и в OnTick(). Пример:
Здравствуйте, пробую перенести индикаторы из MT4 в MT5. Есть простой индикатор, который отображает время до следующего бара. В индикаторе используется OnTimer. Обновление в OnTimer происходит через функцию void refreshClock(). Правильно ли использовать такую конструкцию для других индикаторов, требующих использование OnTimer? Или можно оптимизировать процесс обращения к OnTimer?
Помогите пожалуйста кто-нибудь! Уже попробовал отойти от встроенного Ignore (что, конечно само по себе не хорошо, люди его старались включали в базовый код) и все-равно никак состыковать не могу. Третьи сутки мучаюсь изобретаю (учебника-то нет).
Уже даже коды классов подправил: ввел в классе MySignal защищенный булевый член (m_permition) и метод Set к нему создал, в лонгкондишн и шоткондишн заправил return(0) если !m_permition. В MyTrailing тоже создал защищенный булевый член m_signal_permition, к нему создал методы Get и Set, научил ЧекТрейлинги им управлять if(position==NULL) {m_signal_permition = true; return(false);} else m_signal_permition = false;
Не понимаю только одного, где и как мне их свести. Пробовал просто в OnTick на них ссылаться, не проходит.
Прочитал статью Владимира "Как научить ...". Вроде бы идея создания в пользовательском сигнале экземпляр еще одного сигнала и через него общаться понятная, но где-то у меня до конца не стыкуется: классы сигнала и трейлинга не наследуются друг от друга.
Помогите, люди добрые, кто чем может.
Я за неделю продвинулся! Нашел в классе CExpert метод Signal. Вставил в OnTick код
CExpertSignal *my_signal = ExtExpert.Signal(); my_signal.Ignore(0);
Теперь если в скобках руками на "1" меняю, то метод Ingnore работает - советник сделки по сигналу не совершает.
Осталось только понять, как в OnTick получить информацию об объекте трейлинга. К сожалению, метода ExtExpert.Trailing() для получения ссылки на объект трейлинга нет и, следовательно, компилятор не понимает, к какому объекту я хочу применить свой реализованный в трейлинге метод GetPermition. Может все-таки кто-нибудь подскажет, как быть?
добрый день. уточните плз как реализовать две задачи ( на примере сигналов на покупку).
дано: точка входа - пересечение линий стохастика ниже 20
закрытие сделки - пересечение уровня 80 сверху вниз медленной линией стохастика
1 задача. чтобы при открытой позиции новая сделка открывалась бы когда цена выйдет за пределы некой дельты .т.е. не открывать несколько позиций на одном уровне как на прикрепленном рисунке
2 задача. чтобы закрытие было при втором, а не при первом пересечении уровня 80 сверху вниз медленной линией стохастика
добрый день. уточните плз как реализовать две задачи ( на примере сигналов на покупку).
дано: точка входа - пересечение линий стохастика ниже 20
закрытие сделки - пересечение уровня 80 сверху вниз медленной линией стохастика
1 задача. чтобы при открытой позиции новая сделка открывалась бы когда цена выйдет за пределы некой дельты .т.е. не открывать несколько позиций на одном уровне как на прикрепленном рисунке
2 задача. чтобы закрытие было при втором, а не при первом пересечении уровня 80 сверху вниз медленной линией стохастика
Сначала чётко сформулируйте: