Как перезапустить советник автоматически, после прохождения алгоритма - страница 2

 
Dmitry Fedoseev:

Конечно возможно, но не так, что бы самого советника в терминале перезапускать, а так, чтобы сам советник когда надо работал, когда не надо не работал. Исходник нужен, или сам его создатель должен сделать. Только, что там за создатель - непонятно, если вы не к нему сразу обращаетесь. Переезжает... они все всегда и вечно переезжают. 


Наверняка дел понабрал и увиливает.А пока исходника нет, можно ли "подковырять" к советнику? Ну, к примеру  отключение советника по времени,  я сделал с помощью наложения на другой график. А тут совсем никак?
Кучу литературы прочитал и не могу понять, как советнику сообразить, что он "не дергается" и начать всё заново. Опять же склоняюсь к этим переключениям таймфрейма, туда-обратно, для перезагрузки. Но можно ли это сделать без исходника?
Много вопросов, а гугл не всегда прав 

 

Есть функция ChartApplyTemplate() - можно программно открыть шаблон, в шаблоне может быть советник. Прикрепил один шаблон - снял эксперта, прикрепил другой - запустил.

Но как узнать, что советник завершил цикл - не знаю. Может историю как-то анализировать.

 
Dmitry Fedoseev:

Есть функция ChartApplyTemplate() - можно программно открыть шаблон, в шаблоне может быть советник. Прикрепил один шаблон - снял эксперта, прикрепил другой - запустил.

Но как узнать, что советник завершил цикл - не знаю. Может историю как-то анализировать.

По-идее из старой версии вытянул вот это -  

if (Profit>0 && AccountEquity() - StartBalance >= Profit)

    {

        Print("Закрываем все позиции, т.к. эквити превысило " + DoubleToStr(Profit,2) + "$");

        CloseAllOrders();

        StartPrice = 0;

        Stopped = 7;        

        return;

    }

Происходит общий профит и он завершает ордера. Стоппед 7-мь, как я понял - это вывод сообщения о том.

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

 
Conffessor:

По-идее из старой версии вытянул вот это -  

if (Profit>0 && AccountEquity() - StartBalance >= Profit)

    {

        Print("Закрываем все позиции, т.к. эквити превысило " + DoubleToStr(Profit,2) + "$");

        CloseAllOrders();

        StartPrice = 0;

        Stopped = 7;        

        return;

    }

Происходит общий профит и он завершает ордера. Стоппед 7-мь, как я понял - это вывод сообщения о том.

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


Может быть  Stopped = 7 и есть то, из-за чего советник перестает работать.

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

Основная проблема - как узнать, что пора перезапускать?

 
Dmitry Fedoseev:

Может быть  Stopped = 7 и есть то, из-за чего советник перестает работать.

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

Основная проблема - как узнать, что пора перезапускать?

Я думаю о нескольких вариантах.

Первое - это то, что нет сделок, потому-что все закрылось.

Второе - он же делает профит и выключается, т.е при получении профита. Оно же работает так, если профит такой-то > оно закрывает сделки > А пока закрывается - спит, чтобы не сразу > потом делает с чартом.

Есть же команда "TotalOrders" - можно ли ее вставить? Если их к примеру - 0, то он включает другой советник и так до бесконечности, чтобы полностью автоматизировать

Пока это теория, ведь код еще "не приехал".Если получится, с первой зарплаты от советника - поделюсь :D

А по поводу стоппеда, в начальных версиях по-крайней мере так с ним.Можно также, если стоппед=7, то как вы говорите сменить чарты, можно ли так?

//+------------------------------------------------------------------+

//| Expert tick function                                             |

//+------------------------------------------------------------------+

void OnTick()

  {

    if (Stopped==7)    

    {

      Comment("Было событие ПРОФИТ, советник остановил работу, ждем действий хозяина...");

      return;

    }  

    if (IsTesting()==false)

    {

      if (IsExpertEnabled()==false) 

      {

        Comment("EA is not available, make sure that experts are anabled (AutoTrading button and EA properties)");

        return;

      }                  

    }         

 

Если вы можете узнать чему равно Stopped, то никакие чарты менять не надо. Достаточно просто не присваивать Stopped=7. Но ведь у вас же нет исходников.

Если нет исходников, то можно следить за ордерами, но не совсем так просто есть/нету. Посложнее, если просто нет, то ничего не делать, а вот если был, но исчез - вот тогда перезапускать. 

 
Conffessor:

Наверняка дел понабрал и увиливает.А пока исходника нет, можно ли "подковырять" к советнику? Ну, к примеру  отключение советника по времени,  я сделал с помощью наложения на другой график. А тут совсем никак?
Кучу литературы прочитал и не могу понять, как советнику сообразить, что он "не дергается" и начать всё заново. Опять же склоняюсь к этим переключениям таймфрейма, туда-обратно, для перезагрузки. Но можно ли это сделать без исходника?
Много вопросов, а гугл не всегда прав 


Если вы хоть как-то можете написать код, очень советую бесплатную библиотеку AutoIT, там можно легко нажимать программно в любое место экрана. Вот примерчик, недавно делал

#define AU3_INTDEFAULT                  (-2147483647)   // "Default" value for _some_ int parameters (largest negative number)

input int PutX = 1630;
input int PutY = 205;
input int CallX = 1815;
input int CallY = 205;

struct Point
{
    int x;
    int y;
};

#import "AutoItX3.dll"
    void AU3_MouseGetPos(Point &lpPoint);
    int AU3_MouseClick(/*[in,defaultvalue("LEFT")]*/string szButton = "LEFT", int nX = AU3_INTDEFAULT, int nY = AU3_INTDEFAULT, int nClicks = 1, int nSpeed = 0);
#import

int mX = 0, mY = 0;
Point lpPoint;
int MaxTicket = -1;

void Click(int cmd)
{
    if(cmd == 0)
        AU3_MouseClick("LEFT", CallX, CallY);
    else
        AU3_MouseClick("LEFT", PutX, PutY);        
}
 
Alexey Volchanskiy:

Если вы хоть как-то можете написать код, очень советую бесплатную библиотеку AutoIT, там можно легко нажимать программно в любое место экрана. Вот примерчик, недавно делал


А этой "пушкой" можно понять, что сделок нет и нужно переключить фреймы туда обратно? Или каким-то другим способом? 

Советник выдает же, что закончил работу и закрыл все ордера (во вкладке Эксперты) - реакция от Autoit - может последовать? Если - да, то я займусь именно им

Спасибо за пример.

 
Alexey Volchanskiy:

Если вы хоть как-то можете написать код, очень советую бесплатную библиотеку AutoIT, там можно легко нажимать программно в любое место экрана. Вот примерчик, недавно делал


Нашел кучу видео, грызу автоит.Хорошая штука, спасибо