Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Спасибо за ответ ... итак, для перебора ордеров в истории торгов используем функцию OrdersHistoryTotal, которая после отброса всего нам не нужного представляется как:
for(int i=OrdersHistoryTotal()-1; i>=0; i--) // - здесь вопрос, что значит "accTotal" в шаблоне функции, который мы отбросили? и почему Вы взяли "i--" а не "i++", как в шаблоне?
- вторая функция OrderComment возвращает комментарий выбранного ордера, если он выбран предыдущей функцией OrdersHistoryTotal, принимает вид:
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) //- где "i", это "i>=0" из предыдущей функции, а "SELECT_BY_TICKET" заменили на "SELECT_BY_POS" и добавили "MODE_HISTORY" - почему так?
- третья строчка определение, проверка нужного ордера в принципе не нужна, т. к. в данной истории только рыночные ордера закрытые по ТП. и СЛ., (может присутствовать закрытый отложенный ордер, но это будет редко), все остальные параметры ордера нам не важны. Важно другое - количество закрытых ордеров в истории будет постоянно увеличиваться, нельзя ли так сделать что бы при пересчёте брались не все закрытые ордера, а определённое количество последних, например 5 - 10?
- последние четыре строчки в общем понятны, вопрос лишь в функции PlaySound, код которой необходимо вставить после каждой строчки "Print("..." в таком виде:
OrderComment возвращает комментарий выбранного ордера, если он выбран предыдущей функцией OrdersHistoryTotal - эта функция ничего не выбирает - она возвращает общее число закрытых и удалённых ордеров (Количество закрытых и удаленных ордеров в истории текущего счета, загруженной в клиентском терминале. Размер списка истории зависит от текущих настроек вкладки "История счета" терминала. Цитата из учебника.)
accTotal в примере из учебника:
int i,accTotal=OrdersHistoryTotal(); - Это переменная int - принимающая значение OrdersHistoryTotal
for(i=0;i<accTotal;i++) // Как мотать цикл по списку истории не принципиально с первого до последнего ордера или наоборот, всё равно идёт последовательный перебор всего списка.
Но в предыдущем случае на 1 переменную меньше, но запрос OrdersHistoryTotal обрабатывается каждый цикл.
SELECT_BY_POS - в параметре index передается порядковый номер ордера в списке, сам список это второй оператор - MODE_HISTORY список закрытых, MODE_TRADES - открытые или отложенные.
SELECT_BY_TICKET - в параметре index передается номер тикета. Который перед выбором ордера надо где то взять.
- последние четыре строчки в общем понятны, вопрос лишь в функции PlaySound, код которой необходимо вставить после каждой строчки "Print("..." в таком виде:
bool PlaySound(
string payment // имя файла
);
... или тоже как то преобразуется?
Объяви bool PlaySound( в заголовке программы - получишь возможность в сет файле включать и отключать звук extern bool Play = TRUE;
далее, что будет Print печатать? И при каком условии?
Смысл этого действа в чём заключается? Играть звук при закрытии ордера и писать комент ( по ТП или СЛ) ?
Спасибо Vitalie Postolache за оказанную помощь, спасибо за совет, а информацию по указанным учебникам мне пожалуй поздновато штудировать на шестом десятке, я уж пожалуй не потяну столько, надо было раньше, да времени не было. Я Вам тут изрядно надоел, извиняйте если что, больше не буду - ухожу раз так.
Кстати у меня тоже вопрос созрел.
Нужно написать проверку по Спреду.
Я пользовался просто запросом о его величине и запретом на открытие ордера - если спред больше заданной величины.
Но получилось так - в момент снижения спреда - советник открывает ордер и спред увеличивается.
Теперь никак не могу понять как же его учесть правильно: если каждый тик в массив писать спред насколько массив большой получится? Опять же на какой интервал времени его хватит?
Можно конечно не писать похожие значения или брать только меньшее и большее, но тогда надо обнулять его как то.
А самое главное, я понять не могу, мне надо учитывать минимальный и максимальный спрэд или признак его скачков.{
datetime time; // время начала периода
double open; // цена открытия
double high; // наивысшая цена за период
double low; // наименьшая цена за период
double close; // цена закрытия
long tick_volume; // тиковый объем
int spread; // спред
long real_volume; // биржевой объем
};
{
datetime time; // время начала периода
double open; // цена открытия
double high; // наивысшая цена за период
double low; // наименьшая цена за период
double close; // цена закрытия
long tick_volume; // тиковый объем
int spread; // спред
long real_volume; // биржевой объем
};
int spread; // спред
т.е никакого
{
datetime time; // время начала периода
double open; // цена открытия
double high; // наивысшая цена за период
double low; // наименьшая цена за период
double close; // цена закрытия
long tick_volume; // тиковый объем
int spread; // спред
long real_volume; // биржевой объем
};
Если запросить текущий бар - то текущий спред, если из истории - то на момент закрытия.
Я правильно понимаю, что для записи данных в массив надо присваивать каждой ячейке своё значение array1[i] = x; с указанием на конкретный номер ячейки
или можно последовательно массив заполнять от от i=0 и далее?
Я правильно понимаю, что для записи данных в массив надо присваивать каждой ячейке своё значение array1[i] = x; с указанием на конкретный номер ячейки
или можно последовательно массив заполнять от от i=0 и далее?
в чем разница? по моему это просто два разных пути