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

 
tol64:


)))) Нет, всё же магик лучше оставить. А оставить просто отложенные ордера.

Точнее оставить те магики, которые нужны. А если используется несколько советников на разных графиках, то нужно ещё и символы включить в проверку. Но до этого я пока ещё не дошёл. ))


обычно проверяется символ и магик - символ, чтобы на разных инструментах, магик не менять - а магик, чтобы на одном инструменте и разных таймфреймах использовать - но можно проверять только магик, если его вывести во внешние переменные
 
Подскажите, брокер жмт:0 летом и зимой одним цветом?
 
FOReignEXchange:

Я вообще магиками никогда не пользуюсь. Хотя бывает,что по нескольку позиций. Пользуюсь тикетами. Намного проще проверять через ОрдерСелект. И функция ОрдерСенд становится понятнее. Ну каждый сам хозяин своего почерка. Лично у меня без магиков никаких проблемм никогда не было.

Тикет никогда никуда не денется. С ним удобно.

Ну точно... :) Закройте частично открытую позицию. А потом следом попробуйте изменить её стоп или тейк по имеющемуся у вас на эту позицию тикету. Будет вам ариведерчи... :)

Пример: Имеем открытую позицию лотом 1.0 с тикетом #1. Необходимо закрыть 0.5 лота данной позиции, а оставшиеся 0.5 лота оставить в рынке.

Действия ДЦ:

1. Закрывается позиция #1 полным объёмом (лотом 1.0)

2. Открывается позиция #2 объёмом 0.5 лота

Для вас же это всё выглядит как частичное закрытие позиции #1 и оставление её оставшейся части в рынке. Только тикет у этой позы уже не тот, который вам кажется...

 
FOReignEXchange:


Не понял? Я просто смотрю в справке, там OrderSelect() использует условие. А без true я не видел нигде.

if это же оператор условия. И в скобках должно быть условие. Так логичнее мне кажется. Хоть и разницы может и нету.

Давайте проведём аналогии с русской речью. ИМХО - удобнее читать код, заменяя мысленно его операторы разговорным текстом:

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;

Что имеем тут:

если выбор ордера не произошёл, прерываем цикл.

Теперь:

if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;

Здесь более удобноваримо:

если не выбрали ордер, прерываем цикл.

Одно и то же абсолютно, но читается легче. Да и писать меньше...

А ещё можно лишнее убрать и будет ещё меньше кода:

if(!OrderSelect(i,SELECT_BY_POS)) break;

Почему? Потому, что выбираем рыночный ордер и pool по умолчанию именно MODE_TRADES, значит и его можно опустить в параметре функции OrderSelect()...

О как... :)

 
artmedia70:

О как... :)


)))

Так. У меня утро, значит Доброе утро! ))

У меня очередная аномалия, которая мне не понятна не только на первый взгляд. Наипростейшая операция:

double High_1  = NormalizeDouble(iHigh(Symbol(),Timeframe,1),Digits);
double new_val = NormalizeDouble(High_1 + PlsMns_point*Point,Digits);

В журнале вижу:

А буквально в зеркальном отражении:

 double Low_1   = NormalizeDouble(iLow(Symbol(),Timeframe,1),Digits);
 double new_val = NormalizeDouble(Low_1 - PlsMns_point*Point,Digits);

В журнале вижу вот такую "фигу":

Внешняя переменная PlsMns_point имеет тип int . Передаётся в функцию. Что нужно сделать, чтобы устранить это недоразумение? ))

 

Внешняя переменная PlsMns_point имеет тип int .

Судя по первой записи в журнале она имеет тип Double, int - это целое число.

 
Stells:

Внешняя переменная PlsMns_point имеет тип int .

Судя по первой записи в журнале она имеет тип Double, int - это целое число.


А при умножении на Point вроде преобразование происходит. Но проблема не в этом, так как я пробовал и double.

P.S. Да и к тому же два одинаковых варианта. Отличие только в зеркальном отражении. Почему так?

 

мне кажется у вас вот этого значения нет:

double Low_1 = NormalizeDouble(iLow(Symbol(),Timeframe,1),Digits);

может загрузите историю

 
tol64:


)))

Так. У меня утро, значит Доброе утро! ))

У меня очередная аномалия, которая мне не понятна не только на первый взгляд. Наипростейшая операция:

В журнале вижу:

А буквально в зеркальном отражении:

В журнале вижу вот такую "фигу":

Внешняя переменная PlsMns_point имеет тип int . Передаётся в функцию. Что нужно сделать, чтобы устранить это недоразумение? ))

Выводите принтом ещё и значения переменных High_1 и Low_1. Да и вообще, прямо в функции выведите принтом переданные в неё значения, ну и возвращаемые ею значения тоже распринтуйте. Тогда будет видно откуда плясать начинать. Часто переменные, в которых уверен, принимают абсолютно неожиданные значения. Тогда-то и находится закравшаяся ошибочка.
 

Доброго дня, подскажите как можно изменить объем log файла (регулировать, очищать), который иногда из-за ошибок советника, забивается до огромных значений. Нужен способ реализуемый самим советником.