Выложил обновление. Можно скачивать.VVV писал(а):Спасибо, будем ждатьTerranin писал(а):Похоже бага, сравнивал по параметрам валюте и тамфрейму а имя забыл проверить. Исправил, выпущу обновление в ближайшие 2 дня. Эта бага проявляется только когда параметры 2х индикаторов полностью совпадают.
Ламерский вопрос
- Terranin
- Site Admin
- Сообщения: 846
- Зарегистрирован: Вс июл 23, 2006 12:01 pm
Asta la vista
Mike
Mike
-
- Сообщения: 42
- Зарегистрирован: Пн апр 02, 2007 9:04 am
- Откуда: Красноярск
Доброго времени суток. Вот такой вопрос у меня - как получить доступ к последней по времени закрытой позиции, направление, прибыль и т. д? Как я понимаю, для этого есть фкнкция OrderSelect, флаг надо установить SELECT_BY_POS. А каким образом нумеруются ордера в списке? Т. е. какой номер имеет последняя по времени закрытая поза.
- Terranin
- Site Admin
- Сообщения: 846
- Зарегистрирован: Вс июл 23, 2006 12:01 pm
Позиции нумеруются от 0 и до HistoryTotal - 1, последняя позиция и есть последняя закрытая. Выбирать нужно из журнала истории OrderSelect(SELECT_BY_POS, MODE_HISTORY, HistoryTotal - 1)Komanch писал(а):Доброго времени суток. Вот такой вопрос у меня - как получить доступ к последней по времени закрытой позиции, направление, прибыль и т. д? Как я понимаю, для этого есть фкнкция OrderSelect, флаг надо установить SELECT_BY_POS. А каким образом нумеруются ордера в списке? Т. е. какой номер имеет последняя по времени закрытая поза.
Asta la vista
Mike
Mike
-
- Сообщения: 42
- Зарегистрирован: Пн апр 02, 2007 9:04 am
- Откуда: Красноярск
- Terranin
- Site Admin
- Сообщения: 846
- Зарегистрирован: Вс июл 23, 2006 12:01 pm
Функции актуальны, а с ордерами чего ж непонятного? tp_BuyLimit - отложенный ордер на покупку ниже цены, tp_BuyStop - отложенный ордер на покупку выше цены, tp_Buy - открытая позиция на покупку.Komanch писал(а):ОК, сенкс. А посмотреть результат этой сделки функцией OrderProfit или OrderProfitPips. Т. е. эти функции для закрытых позиций тоже актуальны?
И ещё - непонятны мне слегка типы ордеров в TTradePositionType...
Чем отличается тип "tp_Buy" от "tp_BuyLimit" или "tp_BuyStop"? Просвети, плиз....
Asta la vista
Mike
Mike
-
- Сообщения: 42
- Зарегистрирован: Пн апр 02, 2007 9:04 am
- Откуда: Красноярск
- Hunter
- Сообщения: 49
- Зарегистрирован: Сб ноя 21, 2009 10:22 am
- Откуда: Санкт-Петербург
- Terranin
- Site Admin
- Сообщения: 846
- Зарегистрирован: Вс июл 23, 2006 12:01 pm
Используйте RoundTo(2.55, -1);Hunter писал(а):Здравствуйте.
В Дельфи почему-то не работает функция Round()
То есть в таком виде она работает:
Round(2.55)
А вот в таком (с указанием, до какого знака округлять) не работает:
Round(2.55, 1)
Подскажите, пожалуйста, в чем можт быть дело?
Asta la vista
Mike
Mike
- Hunter
- Сообщения: 49
- Зарегистрирован: Сб ноя 21, 2009 10:22 am
- Откуда: Санкт-Петербург
Снова здравствуйте! Спасибо за обновление, замечательно!
Но непонятно вот что:
8. В интерфейсных файлах API для Delphi переменные типа string заменены на AnsiiString для совместимости с новой версией Delphi которая использует строки формата Unicode.
У меня прекрасно работают старые DLL с использованием string. Создаю новые, тоже со string, и тоже работает!
Какую функцию Вы мне рекомендуете использовать?
Но непонятно вот что:
8. В интерфейсных файлах API для Delphi переменные типа string заменены на AnsiiString для совместимости с новой версией Delphi которая использует строки формата Unicode.
У меня прекрасно работают старые DLL с использованием string. Создаю новые, тоже со string, и тоже работает!
Какую функцию Вы мне рекомендуете использовать?
Дилетанту всё понятно. Специалисту ничего не понятно.
- Terranin
- Site Admin
- Сообщения: 846
- Зарегистрирован: Вс июл 23, 2006 12:01 pm
Это только для Delphi 2010 +, они перешли на строки Unicode где каждый символ задается 2мя байтами. Все предыдущие версии Delphi будут работать со старыми библиотеками. Поэтому пришлось прописать все строки как AnsiString для указания что там 1 байт на символ.Hunter писал(а):Снова здравствуйте! Спасибо за обновление, замечательно!
Но непонятно вот что:
8. В интерфейсных файлах API для Delphi переменные типа string заменены на AnsiiString для совместимости с новой версией Delphi которая использует строки формата Unicode.
У меня прекрасно работают старые DLL с использованием string. Создаю новые, тоже со string, и тоже работает!
Какую функцию Вы мне рекомендуете использовать?
Asta la vista
Mike
Mike
- Hunter
- Сообщения: 49
- Зарегистрирован: Сб ноя 21, 2009 10:22 am
- Откуда: Санкт-Петербург
Здравствуйте.
Программой пользуюсь давно, но только сейчас обнаружил:
если стратегия устанавливает отложенный ордер, но он не открывается, и стратегия его через некоторое время удаляет, то этот ордер не попадает в список ордеров MODE_HISTORY. Так и должно быть?
Программой пользуюсь давно, но только сейчас обнаружил:
если стратегия устанавливает отложенный ордер, но он не открывается, и стратегия его через некоторое время удаляет, то этот ордер не попадает в список ордеров MODE_HISTORY. Так и должно быть?
Дилетанту всё понятно. Специалисту ничего не понятно.
- Terranin
- Site Admin
- Сообщения: 846
- Зарегистрирован: Вс июл 23, 2006 12:01 pm
Да, так и есть. Когда писался этот блок подумалось а нафиг они нужны несработавшие в журнале, только засорять будут. И соответсвенно поиск в журнале будет занимать больше времени.Hunter писал(а):Здравствуйте.
Программой пользуюсь давно, но только сейчас обнаружил:
если стратегия устанавливает отложенный ордер, но он не открывается, и стратегия его через некоторое время удаляет, то этот ордер не попадает в список ордеров MODE_HISTORY. Так и должно быть?
Asta la vista
Mike
Mike
- Hunter
- Сообщения: 49
- Зарегистрирован: Сб ноя 21, 2009 10:22 am
- Откуда: Санкт-Петербург
-
- Сообщения: 329
- Зарегистрирован: Сб июл 11, 2009 3:59 pm
- Hunter
- Сообщения: 49
- Зарегистрирован: Сб ноя 21, 2009 10:22 am
- Откуда: Санкт-Петербург
Делаю так:FT Support писал(а):Параметры для любого индикатора можно задать, посмотрев на них в "ручном режиме", параметры задаются в том же порядке и должны буква в букву соответствовать тому, что видно в окне свойств индикатора.
'35;2.00;0;Close;Simple (SMA)'
-- не помогает. То ли там скрытые пробелы есть?
Дилетанту всё понятно. Специалисту ничего не понятно.
-
- Сообщения: 329
- Зарегистрирован: Сб июл 11, 2009 3:59 pm
- Hunter
- Сообщения: 49
- Зарегистрирован: Сб ноя 21, 2009 10:22 am
- Откуда: Санкт-Петербург
Боллинджер пишет 'illegal value' (в том поле, где вручную задается Simple (SMA)). Большой беды в этом нет, можно остановить стратегию в начале тестирования и вручную установить значение, а потом продолжить тест.
С другими индикаторами проблем не было, за исключением ЗигЗага - но это не Ваш ЗигЗаг, а самодельный. Работает хорошо, но при ручном тестировании если приостановить тест и отмотать назад - за последний экстремум ЗигЗага, то начинает работать неправильно. На всякий случай - вдруг Вам будет интересно - прикрепляю файл с кодом этого ЗигЗага.
С другими индикаторами проблем не было, за исключением ЗигЗага - но это не Ваш ЗигЗаг, а самодельный. Работает хорошо, но при ручном тестировании если приостановить тест и отмотать назад - за последний экстремум ЗигЗага, то начинает работать неправильно. На всякий случай - вдруг Вам будет интересно - прикрепляю файл с кодом этого ЗигЗага.
- Вложения
-
- iZZpoints.zip
- (1.67 КБ) 877 скачиваний
Дилетанту всё понятно. Специалисту ничего не понятно.
- Hunter
- Сообщения: 49
- Зарегистрирован: Сб ноя 21, 2009 10:22 am
- Откуда: Санкт-Петербург
- Terranin
- Site Admin
- Сообщения: 846
- Зарегистрирован: Вс июл 23, 2006 12:01 pm
Можно выводить сообщение функцией Print, она пишет в журнал его можно видеть во время работы программы и он сохраняется в файл. Можно писать напрямую в какой-нибудь файл самому. Можно использовать команду Breakpoint - ставит на паузу, выводит окно сообщения.Hunter писал(а):При отладке советника нужно узнать, какое значение принимает переменная в определенный момент.
Как это сделать? Например, как записать в текстовый файл или вывести в виде сообщения?
Asta la vista
Mike
Mike
- Hunter
- Сообщения: 49
- Зарегистрирован: Сб ноя 21, 2009 10:22 am
- Откуда: Санкт-Петербург
Подскажите, пожалуйста, почему в нижеприведенном коде не работает строка {1} (и, соответственно, не работает строка {2}).
Пришлось их закомментировать и заменить строкой {3}, но это не совсем то, что мне нужно.
Заранее спасибо!
// Пересчитывает баланс торговой системы после закрытия сделки
// Возвращает значение баланса
function GetCurrentBalanceTS(var LCOrder: integer; myDeposit: double; N: string): double;
var
k: integer;
infoorder: TTradePosition;
begin
result := myDeposit;
for k := LCOrder to HistoryTotal - 1 do
begin
if OrderSelect(k, SELECT_BY_POS, MODE_HISTORY) then
if (OrderComment = Commentar + Symbol + N) then
if k > LCOrder then
//{1} if GetOrderInfo(OrderTicket, infoorder) then
begin
LCOrder := k;
//{2} result := result + infoorder.profit + infoorder.swap + infoorder.commission;
{3} result := result + OrderProfit;
end;
end;
end;
Пришлось их закомментировать и заменить строкой {3}, но это не совсем то, что мне нужно.
Заранее спасибо!
// Пересчитывает баланс торговой системы после закрытия сделки
// Возвращает значение баланса
function GetCurrentBalanceTS(var LCOrder: integer; myDeposit: double; N: string): double;
var
k: integer;
infoorder: TTradePosition;
begin
result := myDeposit;
for k := LCOrder to HistoryTotal - 1 do
begin
if OrderSelect(k, SELECT_BY_POS, MODE_HISTORY) then
if (OrderComment = Commentar + Symbol + N) then
if k > LCOrder then
//{1} if GetOrderInfo(OrderTicket, infoorder) then
begin
LCOrder := k;
//{2} result := result + infoorder.profit + infoorder.swap + infoorder.commission;
{3} result := result + OrderProfit;
end;
end;
end;
Дилетанту всё понятно. Специалисту ничего не понятно.
- Hunter
- Сообщения: 49
- Зарегистрирован: Сб ноя 21, 2009 10:22 am
- Откуда: Санкт-Петербург