Доброго времени суток,
у меня функции исполняются експертом при помощи сдвига обьектов на графике.
примерно так:
if(ObjectGet(WindowExpertName()+"label"+4,OBJPROP_XDISTANCE)!=5{OpenPosition(Symbol(),OP_BUY,lot,0,0,magic);}
пока всё работает без сбоев. в программировании не силён, поэтому вопрос к программистам: могут ли быть, при такой реализации какие либо сбои в работе? и при каких обстоятельствах?
Благодарю.
Доброго времени суток,
у меня функции исполняются експертом при помощи сдвига обьектов на графике.
примерно так:
пока всё работает без сбоев. в программировании не силён, поэтому вопрос к программистам: могут ли быть, при такой реализации какие либо сбои в работе? и при каких обстоятельствах?
Благодарю.
Да при таком коде проблемы будут обязательно ,
Посмотрите сами если ваш объект по икс координате не равен 5 открывать (посылать запросы ) пока обьект не вернется на место ,
так вот за момент пока обьект не равен 5 может отправиться 1-10000 запросов и часть может выполниться
Я то же писал подобный полуавтомат ...
спасибо за ответ.
Это вроде я предусмотрел.
int init() {//функция инициализации советника Createlabel(4,Green,12,"OP_BUY"); Createlabel(3,Red,12,"OP_SELL"); Createlabel(2,Green,12,"OP_BUYLIMIT"); Createlabel(1,Red,12,"OP_SELLLIMIT"); Createlabel(0,White,12,"DELETE_LIMIT"); } // ========= конец функции //============================= Функция СТАРТ =====================================+ void start() { if(ObjectFind(WindowExpertName()+"label"+4)!=-1)//на всякий случай { if(ObjectGet(WindowExpertName()+"label"+4,OBJPROP_XDISTANCE)!=5{OpenPosition(Symbol(),OP_BUY,lot,0,0,magic);} if(ObjectGet(WindowExpertName()+"label"+3,OBJPROP_XDISTANCE)!=5{OpenPosition(Symbol(),OP_SELL,lot,0,0,magic);} if(ObjectGet(WindowExpertName()+"label"+2,OBJPROP_XDISTANCE)!=5{SetOrder(Symbol(),OP_BUYLIMIT,lot,0,0,magic,0);} if(ObjectGet(WindowExpertName()+"label"+1,OBJPROP_XDISTANCE)!=5{SetOrder(Symbol(),OP_SELLLIMIT,lot,0,0,magic,0);} if(ObjectGet(WindowExpertName()+"label"+0,OBJPROP_XDISTANCE)!=5){DeleteOrders(Symbol(),op1,magic);} } Createlabel(4,Green,12,"OP_BUY"); Createlabel(3,Red,12,"OP_SELL"); Createlabel(2,Green,12,"OP_BUYLIMIT"); Createlabel(1,Red,12,"OP_SELLLIMIT"); Createlabel(0,White,12,"DELETE_LIMIT"); }
после отправки ордера он ставит обьект обратно.
пока вроде как всё работает. что ещё может произойти?
ваш полуавтомат пользуете? или непрактичен такой подход?
Много чего, но речь, как я понимаю, о ситуации, когда:
ObjectGet(WindowExpertName()+"label"+4,OBJPROP_XDISTANCE)=5.000000000000000000000000000001
Много чего
можно пару примеров?
tara:
но речь, как я понимаю, о ситуации, когда:
ObjectGet(WindowExpertName()+"label"+4,OBJPROP_XDISTANCE)=5.000000000000000000000000000001
ах, и такое может быть!!! поставил условие >6.
ведь после исполнения услаовия OpenPosition, Createlabel ставит обьект на место. условие не может выполняться несколько раз прежде чем Createlabel.
в чём я заблуждаюсь?
сделал вот так:
if(ObjectFind(WindowExpertName()+"label"+4)!=-1) { if(ObjectGet(WindowExpertName()+"label"+4,OBJPROP_XDISTANCE)>6) { OpenPosition(Symbol(),OP_BUY,GlobalVariableGet("lot"+txt+magic),0,0,magic); Createlabel(4,Green,12,"OP_BUY"); } if(ObjectGet(WindowExpertName()+"label"+3,OBJPROP_XDISTANCE)>6) { OpenPosition(Symbol(),OP_SELL,GlobalVariableGet("lot"+txt+magic),0,0,magic); Createlabel(3,Red,12,"OP_SELL"); } if(ObjectGet(WindowExpertName()+"label"+2,OBJPROP_XDISTANCE)>6) { SetOrder(Symbol(),OP_BUYLIMIT,GlobalVariableGet("lot"+txt+magic),NormalizeDouble(GlobalVariableGet("srd"+txt+magic),Digits),0,0,magic,0); Createlabel(2,Green,12,"OP_BUYLIMIT"); } if(ObjectGet(WindowExpertName()+"label"+1,OBJPROP_XDISTANCE)>6 && GlobalVariableGet("lot"+txt+magic)>0) { SetOrder(Symbol(),OP_SELLLIMIT,GlobalVariableGet("lot"+txt+magic),NormalizeDouble(GlobalVariableGet("srd"+txt+magic),Digits),0,0,magic,0); Createlabel(1,Red,12,"OP_SELLLIMIT"); } if(ObjectGet(WindowExpertName()+"label"+0,OBJPROP_XDISTANCE)>6) { DeleteOrders(Symbol(),op1,magic); Createlabel(0,White,12,"DELETE_LIMIT"); } } Createlabel(4,Green,12,"OP_BUY"); Createlabel(3,Red,12,"OP_SELL"); Createlabel(2,Green,12,"OP_BUYLIMIT"); Createlabel(1,Red,12,"OP_SELLLIMIT"); Createlabel(0,White,12,"DELETE_LIMIT");
наверно уже боятся нечего?
Наверное, нечего, если ошибки обрабатываются надлежащим образом, а это не так.
Функция перевыставления объектов должна вызываться из функций управления позициями, имхенько.
Ну, или ее вызов должен быть обусловлен результатами исполнения последних.
Наверное, нечего, если ошибки обрабатываются надлежащим образом, а это не так.
Функция перевыставления объектов должна вызываться из функций управления позициями, имхенько.
Ну, или ее вызов должен быть обусловлен результатами исполнения последних.
дельные советы. спасибо.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Три аспекта ручного автотрейдинга. Часть 1 - Торговля:
Прежде чем начинать что-то читать, давайте для начала посмотрим как работает то, что будет потом изложено в статье. Видео даст представление о процессах происходящих в терминале в процессе торговли, и после этого читать статью будет гораздо проще (что-то вроде: "Аааа..., это вот так, оказывается, реализован вот тот сброс!").
Для осознанного восприятия ролика пока достаточно будет понимать, что в терминале работает эксперт, которым управляют с помощью сброса в окно терминала управляющих скриптов. Сам по себе эксперт не торгует, он только и умеет, что подтягивать стоп-уровни (Stop Loss и Take Profit) в трейлинге, но делать это начинает так же по команде трейдера. Названия скриптов очевидно соответствуют выполняемым действиям, а всплывающие подсказки поясняют их использование.