Почему Вы решили, что у Вас закрываемый ордер всегда имеет номер 1?
OrderSelect(1, SELECT_BY_POS, MODE_TRADES);
http://www.alpari-idc.ru/ru/experts/articles/8.html
http://www.alpari-idc.ru/ru/experts/articles/9.html
OrderSelect(1, SELECT_BY_POS, MODE_TRADES);
http://www.alpari-idc.ru/ru/experts/articles/8.html
http://www.alpari-idc.ru/ru/experts/articles/9.html
Смотрите как я сделала:
if(AccountFreeMargin()<(1000*Lots)) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); } if(High[1] >= Middle+s+gauss()) { [b] total=OrdersTotal(); for(int l=0;l<total;l++) { OrderSelect(l, SELECT_BY_POS, MODE_TRADES); if (OrderType()==OP_BUY) return (0); if (OrderType()==OP_SELL) { result=OrderClose(OrderTicket(),OrderLots(),Ask,10,Yellow); return (0); } } [/b] ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "simple",16384,0,Green); if(ticket>0){ if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); } Middle = Middle+s+gauss(); } if(Low[1] <= Middle-s+gauss()) { [b] total=OrdersTotal(); for(l=0;l<total;l++) { OrderSelect(l, SELECT_BY_POS, MODE_TRADES); if (OrderType()==OP_SELL) return (0); if (OrderType()==OP_BUY) { result=OrderClose(OrderTicket(),OrderLots(),Bid,10,Yellow); return (0); } } [/b] ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0, "simple",16384,0,Green); if(ticket>0){ if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Sell order opened : ",OrderOpenPrice()); } Middle = Middle-s+gauss(); } } int init() { rand_seed = 13; return(0); }
Теперь система открывает одну единственную сделку, всегда на sell, потом пишет в журнале что нет маржи и закрывает по close at stop .
Наверное, вообще не закрывает ордера.
При изменении параметра s результат абсолютно не меняется, все те же цифры.
В чем может быть дело?
Я по природе не программист, мне программу помогли написать, но те, кто помогли, глубоко в этих вещах не разбираются. Честно скажу, мне это нужно для дипломной работы, и мне кажется, что кроме участников данного форума мне помочь никто не сможет.
Извините за лирику
Спасибо
Напишите мне на мейл или в асю ( "MQL4: профиль пользователя komposter" ), что именно должен делать советник.
Проще будет написать заново, чем копаться в чужом коде ;)
Проще будет написать заново, чем копаться в чужом коде ;)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Ниже код советника.
При тестировании, не совершая ни одной сделки, пишет в журнале:
invalid ticket for OrderClose function много, много раз и все. Идея системы:
- в начале задаем некоторый начальный уровень Middle - значение цены и величину шага -s - в пунктах
- далее проверяем: если максимальная цена High больше суммы -
Middle + s+ случайная величина (её генерация описывается функцией gauss в начале алгоритма), то новое значение Middle = старое значение Middle +s+ сл величина, и в следующий раз берется уже это полученное значение, и т.д.
-и открывается ордер на buy, если он ещё не открыт, закрывется ордер на sell, если таковой открыт
Соответственно,
-если минимальная цена Low оказывается меньше суммы
Middle + s+ случайная величина, то новое значение Middle = старое значение Middle - s+ сл величина, и сделки совершаются наоборот.
Подскажите, где тут ошибка!
Спасибо