Я тоже логику не понял, но решил промолчать - мало ли, может там какая-то хитрая мысль, не изложенная в описании. Но похоже в данном случае моя излишняя вежливость может и не нужна :-b
Изменено 29 октября, 2015 пользователем st2050
От xbms, 13 апреля, 2013 в Уголок Программиста
Я тоже логику не понял, но решил промолчать - мало ли, может там какая-то хитрая мысль, не изложенная в описании. Но похоже в данном случае моя излишняя вежливость может и не нужна :-b
Изменено 29 октября, 2015 пользователем st2050
ПС: зачем Вам Sleep(20000);?
Слип нужен был чтоб он открывал ордера с задержкой так как он их открывал просто пачками.
Зачем это нужно ? У меня есть сова которая показывает очень хорошие результаты но работает без мэджика и на одном графике...
Всеравно что-то не получается , он так и продолжает открывать сел и бай стоп пачками что я делаю не так , я относительно недавно начал изучать программирование советников так что прошу прощения за гавнокод
int order_type=OrderType();
int _GetLastError=0,_OrdersTotal=OrdersTotal();
int countSS=0, countBS=0;
for(int z=_OrdersTotal+1; z>=0; z ++)
{
if(OrderSelect(z,SELECT_BY_POS))
{
// вот проверка что ордер отложенный
if (order_type==OP_BUYSTOP || order_type==OP_BUYLIMIT || order_type==OP_SELLSTOP || order_type==OP_SELLLIMIT){
//---- если позиция открыта не по текущему инструменту, пропускаем её
if(OrderSymbol()!=Symbol()) continue;
//---- если MagicNumber не равен Expert_ID, пропускаем эту позицию
if(OrderMagicNumber()!=Magic) continue;
if (order_type==OP_BUYSTOP) countBS++;
if (order_type==OP_SELLSTOP) countSS++;
}}
else
{
if (countBS == 0) order=OrderSend(Symbol(),OP_BUYSTOP,Lots*0.1,Ask+Otstup*Point,3,0,0,"",Magic,0,Green);
if (countSS == 0) order=OrderSend(Symbol(),OP_SELLSTOP,Lots*0.1,Bid-Otstup*Point,3,0,0,"",Magic,0,Green);
}
}
int order_type=OrderType();
int _OrdersTotal=OrdersTotal();
int countSS=0, countBS=0;
for(int z=_OrdersTotal+1; z>=0; z ++)
{
if(OrderSelect(z,SELECT_BY_POS))
{
//---- если позиция открыта не по текущему инструменту, пропускаем её
if(OrderSymbol()!=Symbol()) continue;
//---- если MagicNumber не равен Expert_ID, пропускаем эту позицию
if(OrderMagicNumber()!=Magic) continue;
if (order_type==OP_BUYSTOP) countBS++;
if (order_type==OP_SELLSTOP) countSS++;
}
}
if (countBS == 0) order=OrderSend(Symbol(),OP_BUYSTOP,Lots*0.1,Ask+Otstup*Point,3,0,0,"",Magic,0,Green);
if (countSS == 0) order=OrderSend(Symbol(),OP_SELLSTOP,Lots*0.1,Bid-Otstup*Point,3,0,0,"",Magic,0,Green);
int order_type=OrderType();
int _OrdersTotal=OrdersTotal();
int countSS=0, countBS=0;
for(int z=_OrdersTotal+1; z>=0; z ++)
{
if(OrderSelect(z,SELECT_BY_POS))
{
//---- если позиция открыта не по текущему инструменту, пропускаем её
if(OrderSymbol()!=Symbol()) continue;
//---- если MagicNumber не равен Expert_ID, пропускаем эту позицию
if(OrderMagicNumber()!=Magic) continue;
if (order_type==OP_BUYSTOP) countBS++;
if (order_type==OP_SELLSTOP) countSS++;
}
}
if (countBS == 0) order=OrderSend(Symbol(),OP_BUYSTOP,Lots*0.1,Ask+Otstup*Point,3,0,0,"",Magic,0,Green);
if (countSS == 0) order=OrderSend(Symbol(),OP_SELLSTOP,Lots*0.1,Bid-Otstup*Point,3,0,0,"",Magic,0,Green);
Изменено 29 октября, 2015 пользователем grave
int order_type=OrderType();
int _OrdersTotal=OrdersTotal();
int countSS=0, countBS=0;
for(int z=_OrdersTotal+1; z>=0; z ++)
{
if(OrderSelect(z,SELECT_BY_POS))
{
//---- если позиция открыта не по текущему инструменту, пропускаем её
if(OrderSymbol()!=Symbol()) continue;
//---- если MagicNumber не равен Expert_ID, пропускаем эту позицию
if(OrderMagicNumber()!=Magic) continue;
if (order_type==OP_BUYSTOP) countBS++;
if (order_type==OP_SELLSTOP) countSS++;
}
}
if (countBS == 0) order=OrderSend(Symbol(),OP_BUYSTOP,Lots*0.1,Ask+Otstup*Point,3,0,0,"",Magic,0,Green);
if (countSS == 0) order=OrderSend(Symbol(),OP_SELLSTOP,Lots*0.1,Bid-Otstup*Point,3,0,0,"",Magic,0,Green);
Всеравно открывает безконечно , если я не ошибаюсь то order_type==OP_BUYSTOP не может быть так как order_type равен цифре или я не прав ?
Заработало =)
Огромнейшее спасибо!!! <:-p>
Заработало =)
Огромнейшее спасибо!!! <:-p>
Друзья, здравствуйте! Помогите советом: есть робот, который работает так как и нужно, когда на счете только он один и на одной паре. Но как только стоит его же запустить на другую пару этого же счета, то все начинает глючить - выдает ошибку "не правильных параметров" (err 3). Хотя, магики разные... даже, специально сделал для каждой пары своего, отдельного, чтоб он не путался, но не помогло... Кто знает, как можно это исправить???? Цель - один робот на одном счете работает на разных параз. Заранее, благодарю.
Хахаха. Невнимательность к деталям - будни прикладного программиста. Это уже стиль работы - главное рыбу написать, а косяки при отладке повылазят.
Сначала делаем грабли, а потом с ними героически боремся и всем рассказываем с умным видом, какое оно сложное - программирование 8-}
Вспомнился мульфильм "И так сойдет":
[SPOILER]
Изменено 30 октября, 2015 пользователем st2050
Цитата
Куски кода представить можете? Ибо мы тут не экстрасенсы.
Просто, мне показалось что это может быть распространённой ошибкой... Отправляю часть кода...
Изменено 31 октября, 2015 пользователем Qj
Заработало =)
Огромнейшее спасибо!!! <:-p>
И где полученный результат, верный код?
Выложите итоговый файл - может кто-то что-то еще предложит, подкрутит.
Изменено 30 октября, 2015 пользователем grave
Сама сова называется ambush можно ее найти на оф сайте mt4 , выложить ее не могу так как парюсь над ней уже 2 месяца (сама идея совы очень понравилась) и как кто-то писал на этом форуме , чем меньше людей знает о тс тем дольше она работает.
Изменено 30 октября, 2015 пользователем Старик
Ладно , так тому и быть выкладываю сову. Потерял свой депозит на советнике forex hero AC еще пол года назад и еще не скоро насобираю на новый так что ловите.
Крайне интересно испытать его на реале, тестер почему-то больше 76% не моделирует. Кто всетаки скачает и начнет гонять его выкладывайте результаты сюда.
Логика советника по стопам устроена так, он отдает один процент дэпо за возможность получить пятнадцать ну или тралит от 1 до 15 % при открытии сделки.Крайне эффективен при авто лоте.
Что я дописал и изменил:
Авто лот ставим ноль или пишем свой
прописан мэджик и открытие ордеров при отсутствии (не без вашей помощи =) )
перепрописал слип по моему мнению лучше 60000
убрал стрелочный флуд (раньше рисовал стрелки при смещении сс или бс)
также некоторые функции работали только на тестере , перепрописал чтоб и в реальной торговле их использовал.
тайм фрейм советую 15м пара EURUSD
Разрешить импорт из DLL
там есть вот такой момент
if(((AccountEquity()-AccountBalance())>KO*PK) || (AccountEquity()-AccountBalance())
{
if(OrderType()==OP_BUY) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS)),3);
if(OrderType()==OP_SELL) result= OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),30);
if(OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP) OrderDelete(OrderTicket());
что-то мне подсказывает что при достижении нужного результата он будет закрывать абсолютно все ордера и отложки даже чужих сов.
Изменено 7 ноября, 2015 пользователем grave
grave, я бы вам рекомендовал присмотреться к Аспиду, ссылку на который я дал.
Там нормальный код и достаточно большие возможности.
Ваш бот собран из фрагментов кода 2005-2006-2008 годов.
В принципе код рабочий, но совсем раритетный.
И, заметьте, за очень много лет ваш бот вроде никого не заинтересовал и развития не получил - что напрягает.
Можно, конечно, бота выложить здесь - может кто-то и посоветует. Но здесь народ тестами не занимается.
Если хотите, чтобы бота кто-то потестил и что-то посоветовал, то выложите бота в Лаборатория ProfitFX.
Там народ быстро диагноз поставит.
я не использую данного бота, так как он (в существенной части по моей вине) не был доработан до следующего уровня.
до сих пор мои предложения к боту я так и не выписал в полном объеме - правда, пытаюсь это сделать в общем виде, что намного сложнее.
Но бота писал компетентный человек и бот, на текущем уровне, вполне неплох.
И рынок сейчас более-менее трендовый.
Имхо, бота просто недораскрутили-недоработали.
Пробуйте.
Если работает нормально, выкладывайте тесты в его топике, люди могут подтянуться и может торги ботом наладятся.
Я думаю Qj не нуждается в моём ответе, но поясню для начинающих читателей:
Я везде вижу что при закрытие пачки ордеров или их изменение всегда ставят sleep. Вопрос такой нужен ли он вообще?
Изменено 1 ноября, 2015 пользователем 0ll
Полностью согласен. Тоже к этому пришёл, самое оптимальное решение.
Я думаю Qj не нуждается в моём ответе, но поясню для начинающих читателей:
Я везде вижу что при закрытие пачки ордеров или их изменение всегда ставят sleep. Вопрос такой нужен ли он вообще?
функция Слип вешает экспертный поток терема, остаются в работе только МТ функции по приёму и отображению котировок, ручной режим, скрипты и индюки вызванные вручную. Все эксперты - висят. Не надо злоупотреблять этой функцией. её используют только при ошибках (при выставлении торговых приказов), но не всех, а только связанных со связью мт и сервера, например занятость потока, обрыв связи и т.д.
Иногда используют при реквоте или другими ошибками в цене, но я рекомендую ставить флаг и дождаться нового тика по символу и сразу (по флагу) переходить к отложенной процедуре открытия ордера - т.е. не использовать Слип, а дать возможность другим совам в терминале отработать свой код.
Всё имхо.
ПС: это касается только МТ4
Это зависит от многих факторов, в том числе настроек сервака, пинга и т.д. Надо пробовать...
Получается если я обновляю ТП в сетке ордеров к примеру 20 без sleep, то не возникнет ошибки что слишком много запросов к серверу?
Спасибо за совет, друзья!!!)) завтра переделаю, может и правда все из-за "Sleep"...
Для публикации сообщений создайте учётную запись или авторизуйтесь
Перейти к списку тем