[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 40

 
Noterday:

Вставил в свой советник новый блок для расчёта размера лота открываемой позиции. Смысл такой:

1. Стоп ставится на High текущего дня при Sell позиции, и на Low дня при Buy позиции.

2. При срабатывании условия на открытие ордера начинает выполняться этот блок для расчёта лота. Считается расстояние до High\Low дня в пунктах, циклом перебираю лоты начиная с 0,1, для того чтобы найти нужный лот (5% при срабатывании стопа)

Но в журнале появляются такие строки:

2011.01.30 16:59:47 TestGenerator: unmatched data error (volume limit 1107 at 2011.01.13 14:45 exceeded)

Как только выключаю данный блок, то всё ок. Где я ошибаюсь? Подскажите пожалуйста.

Вот сам код:

Вряд ли сообщение тестера связано с Вашим кодом.

Попробуйте еще и еще раз пересчитать все таймфреймы в Архиве котировок.

В сообщении говорится, что объем 1107 достигнут в 14:45, что совершенно невозможно, т.к. торги продолжались до 24:00.

Впрочем, этой ошибкой вполне можно пренебречь.

 
Saltan:

При попытке компиляции включаемого файла (*.mqh) появляется ошибка '\end_of_program' - no function defined. Что не так и как это исправить?

extern double Lots = 0.0;
extern int Percent = 0;
extern int StopLoss = 100;
extern int TakeProfit = 40;
extern int TrailngStop = 100;

int Level_New;
int Level_Old;


такое бывает - и это нормально. Например, у меня в инклюде Вариаблес..mqh - указаны внешние и глобальные переменные эксперта...при компиляции пишет '\end_of_program' - no function defined, что-то типа отсутствует конец в программе, функция не определена, но при этом, когда компилирую сам эксперт, то все в порядке - 0 ошибок, 0 предупреждений. (*.mqh) - отдельно компилировать не надо, при компиляции самого эксперта компилятор разместит все его инклюды вместе и там уже будет решать - есть ли ошибки, нет ли ошибок и т.д. :-))) Так что все нормуль. Попробуйте компилить Самого...

П.С. При компиляции других инклюдов компилятор может писать, что какая-либо глобальная переменная не определена... Конечно, она и не должна быть определена, если она у Вас забита совершенно в другом инклюде. Обращаю внимание на порядок размещения инклюдов... Если переменная определена в одном, а используется в другом инклюде, то необходимо первый инклюд по тексту размещать раньше второго, иначе будет получена ошибка при компиляции - такая-то переменная не определена, вообще все глоб перем определяют в самом внешнем инклюде. Либо же как вариант их можно определять в любом другом, если эти переменные использует только он. Как-то так... Сумбурно, но должно быть понятно. Пробуйте.

 
DhP:

Вряд ли сообщение тестера связано с Вашим кодом.

Попробуйте еще и еще раз пересчитать все таймфреймы в Архиве котировок.

В сообщении говорится, что объем 1107 достигнут в 14:45, что совершенно невозможно, т.к. торги продолжались до 24:00.

Впрочем, этой ошибкой вполне можно пренебречь.

Ну ведь когда закоментировал этот блок то всё нормально в тестере идёт. Значит ошибка в этом блоке...
 
100yan:
Не вопрос... Но Как определить текущее значение ТФ в коде?

Period() поможет
 
Sergey_Rogozin:

Рассмотрел обложку УЧЕБНИКА со всех сторон и все равно ничего не понял...)))

Везде вижу, что пишут так:

Справедливо ли нижеприведенное написание, если я хочу получить Price = OrderOpenPrice() для дальнейшей обработки и установки Стопов?

Оно у меня работает, но допустимо ли такое?

Ваша строчка также справедлива, как и первая.

Таким образом Вы можете получить любую информацию об открытом ордере,

но только один раз в момент подтверждения открытия.

Cм. https://docs.mql4.com/ru/trading/OrderSend

 
Noterday:
Ну ведь когда закоментировал этот блок то всё нормально в тестере идёт. Значит ошибка в этом блоке...
    double DistanceToHighDay = MathAbs(HighDay-Ask)*10000;
    double DistanceToLowDay  = MathAbs(Bid-LowDay)*10000;

Скорее всего, из-за Вашего обращения к данным дня, которые по объему не согласованы с минутками,

и тестер Вас об этом предупреждает.
 
Переменные HighDay и LowDay используются не только в этом блоке, но и в других местах программы, так что думаю они ни причем. А сам алгоритм того блока на Ваш взгляд верно написан?
 

Может кто то лучше сможет?

1. Стоп ставится на High дня при Sell позиции.

2. Дальше вычисляем расстояние в пунктах от текущей цены до High дня.

3. Считаем сколько это расстояние будет в $ при 0,1 лоте и считаем сколько это будет в % от депозита. Если будет меньше чем 5%, то считаем для 0,2 лота и т.д. пока не превысит 5%.

И тогда это и будет тот размер лота, который нужен.

Мой код почему то не пашет....хотя вроде бы всё верно написано.

 

КТО ЗНАЕТ?

как программно обратиться с Болинджеру, в котором указано - применить к "Previous Indicator's Data" ? что ставить в поле applied_price?

спасибо

 

Всем доброго времени суток. Вопрос такой: Как заставить работать CheckEvents ? Файл Events (от Komposter) находится в директории include. Есть пример в EventsExpert.mq4:

CheckEvents( MagicNumber );

        if ( eventBuyClosed_SL > 0 )
                Alert( Symbol(), ": Buy-позиция закрыта по СтопЛоссу!" );

Но мне не нужен Alert. Мне нужно чтобы при закрытии рыночного ордера по СтопЛоссу удалялся отложенный .

CheckEvents( Magic==0 );
    
   if (eventBuyClosed_SL > 0)
   ??????????? 
        
   DELETE("Buy Stop");

Что прописать вместо Alert? Если конечно данная функция подходит для этой задачи.

Причина обращения: