Добрый день.
Изучаю программирование МТ на практике написания первого простого советника.
Условие для продажи простые:
Если день завершился черной свечкой(снижение), то продаем....
Во первых несоответствие кода условию, ну да ладно.
Еще как минимум 2 ошибки и отсутствие контроля баров.
Надеюсь, разберетесь сами.
ERROR_SHORTS_NOT_ALLOWED | 4111 | Короткие позиции не разрешены. Необходимо проверить свойства эксперта. |
Во первых несоответствие кода условию, ну да ладно.
Еще как минимум 2 ошибки и отсутствие контроля баров.
Надеюсь, разберетесь сами.
ERROR_SHORTS_NOT_ALLOWED | 4111 | Короткие позиции не разрешены. Необходимо проверить свойства эксперта. |
Все, вроде разобрался...
Контроль баров есть, просто решил сократить код для вопроса сюда...
А вот что касается:
...несоответствие кода условию
то можно поконкретнее пожалуйста...
это очень важно...
(Close[1]<Open[1]) - в этом месте ?
Проанализировав результат тестера:
Как сделать так: каждый день (дневные свечки) совершалась только одна операция
И совершалась она так: Если день закончился черной свечкой, то при начале новой свечки ПРОДАТЬ
далее, поза закрывается либо ТП либо Стопом в течении дня...и советник спит до окончания дня
и снова....Если день закончился черной свечкой, то при начале новой свечки ПРОДАТЬ...и т.д.
if (iClose(Symbol(),PERIOD_D1,1)<iOpen(Symbol(),PERIOD_D1,1)) //Если прошлая свеча черная, то... OrderSend(Symbol(),OP_SELL, Lots, Bid, 10, Bid+StopLoss*Points, Bid-TakeProfit*Points, 0, 0, Red);
Так ?
Вопрос: а как сделать, чтоб советник совершал только одну сделку в день ?
т.е. если поза закрылась стопом или профитом, советник должен молчать и ждать окончания дня....
Правильно ли будет использовать переменную, в которой будет храниться 1 или 0, где
1 - сделка уже была;
0 - сделка еще не совершалась;
Но как советник будет знать, что начался новый день, чтобы обнулить эту переменную ?
Вопрос: а как сделать, чтоб советник совершал только одну сделку в день ?
т.е. если поза закрылась стопом или профитом, советник должен молчать и ждать окончания дня....
//+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 19.02.2008 | //| Описание : Возвращает номер бара открытия последней позиции или -1. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" или NULL - текущий символ) | //| tf - таймфрейм ( 0 - текущий таймфрейм) | //| op - операция ( -1 - любая позиция) | //| mn - MagicNumber ( -1 - любой магик) | //+----------------------------------------------------------------------------+ int NumberOfBarOpenLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) { datetime t; int i, k=OrdersTotal(); if (sy=="" || sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sy) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (t<OrderOpenTime()) t=OrderOpenTime(); }} } } } } return(iBarShift(sy, tf, t, True)); }
Тогда в условия входа нужно вставть
if (!NumberOfBarOpenLastPos(NULL, 0,-1, Magic) ==0) {//запрет неск. сделок на текущ. баре .... ... ..... ............................. }
Интересная функция.
Попробую....
________________
if (NumberOfBarOpenLastPos(NULL, 1440,-1, Magic) != 0) {//запрет более 1 сделки на день
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день.
Изучаю программирование МТ на практике написания первого простого советника.
Условие для продажи простые:
Если день завершился черной свечкой(снижение), то продаем....
При тестировании в журнале ошибка ...OrderSend error 4111
С уважением....