а где проверка на колво ордеров уже выставленных? и подсчёт колва баров.... и отчего ПОИСК не используешь?
А разве это не проверка? (Я не программист (прочитал книгу и написал советника), потому заранее прошу прощения если где-то туплю)
for(int k=0; k<=OrdersTotal(); k++)
{
if (OrderSelect(k,SELECT_BY_POS,MODE_TRADES)==true)
{
На сколько я понимаю советник ищет ордера, если они есть (if (OrderSelect(k,SELECT_BY_POS,MODE_TRADES)==true)) и if (OrderOpenPrice()!=Ask/Bid), то можно открываться. Если нет (фолс), то можно открываться. А на счет открытия на одном баре, то здесь идет проверка if (OrderOpenPrice()==Ask/Bid)break - я так понимаю, это должно решать проблему...
if (OrderOpenPrice()==Ask/Bid)break - я так понимаю, это должно решать проблему...
нууу... выставили ордер... через пару тиков Бид изменился... - вот он откроет Ещё 1 сделку - через 2 тика ещё 2...3....4...5 и тд.. при чём тут Бид?
if (OrderOpenPrice()==Ask/Bid)break - я так понимаю, это должно решать проблему...
нууу... выставили ордер... через пару тиков Бид изменился... - вот он откроет Ещё 1 сделку - через 2 тика ещё 2...3....4...5 и тд.. при чём тут Бид?
Здесь делался упор на то, что если цена открытия ордера = текущей цене - ничего не делаем
а проверка баров где?
Я так понимаю, что подобную формулировку можно использовать, но, в таком случае, нужно добавить проверку на открытие нового бара?
ну типа того :) - я не докапываюсь :) просто хочу чтоб ты самостоятельно решил проблему... размышляй рассуждай и пиши примерчики кода :)
здесь пиши... :)
Всем привет.
Есть проблема. Мой советник открывает то количество ордеров, которое ему нравится, хотя должен открывать не более 1 ордера на бар (может открыть 1, а может и пару десятков, если депозит позволяет). Я уже кучу ограничений ставил - не помогает. Вот код. Подскажите, пожалуйста, где ошибка.
Заранее благодарен.
ну если топикстартер хочет самостоятельно научиться писать программы, тогда:
1. радует, что код построен из отдельных ф-ций, проще писать и дополнять своим кодом
2. сделайте, как обычно все делают ф-цию подсчета своих ордеров и вызывайте эту ф-ци сразу в первой строчке ф-ции старт, у меня эта ф-ция выглядит так:
void Myorders(){ int cnt; total_order = OrdersTotal()-1; my_total_order = 0; HaveBuyOrder = false; HaveSellOrder = false; for(cnt = total_order; cnt >= 0; cnt--) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if (OrderType() == OP_BUY) {HaveBuyOrder = true; my_total_order++;} if (OrderType() == OP_SELL) {HaveSellOrder = true; my_total_order++;} } } }
после вызова ф-ции Myorders() у меня в переменных (флаг) HaveBuyOrder и HaveSellOrder признак наличия открытых ордеров, переменные
if (! HaveBuyOrder && MA1>MA2) Buy (); // если нет открытых ордеров BUY и МАшки MA1>MA2 то вызовем ф-цию Buy ()
HaveBuyOrder и HaveSellOrder и my_total_order описаны глобальными для всего кода, т.е. в самом верху кода-до ф-ции старт, Magic - это магик ордера, он описан в настройках советника (extern int)
перед выставлением ордера я контролирую флаг наличия ордера,
можно эту ф-цию расширить и ставить по нескольку ордеров, нужно my_total_order отдельно для BUY и SELL
попробуйте так контролировать свои ордера
ну типа того :) - я не докапываюсь :) просто хочу чтоб ты самостоятельно решил проблему... размышляй рассуждай и пиши примерчики кода :)
здесь пиши... :)
ок, спасибо. я все понимаю. просто ломал голову и так и сяк, а он все не слушается. теперь буду работать в этом направлении дальше
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет.
Есть проблема. Мой советник открывает то количество ордеров, которое ему нравится, хотя должен открывать не более 1 ордера на бар (может открыть 1, а может и пару десятков, если депозит позволяет). Я уже кучу ограничений ставил - не помогает. Вот код. Подскажите, пожалуйста, где ошибка.
Заранее благодарен.