Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 749

 
Vinin:

Эту формулу довольно легко исправить под требования. Необходимо просто учитывать минимальный лот

Выглядеть будет немного по другому

lot=Min_Lot+lotstep*MathRound((AccountBalance()-X)*0.001/lotstep);

Где Х - Баланс для открытия минимального лота,

Но проверка на минимальный лот все равно нужна будет.

Вот зачем все эти сложности, X какой-то, который отдельно надо вычислять? Да ещё и проверка дополнительная потом потребуется...

Не проще ли проконтролировать прямым и честным образом валидность и допустимость всех значений, составляющих формулу, а потом её просто честно вычислить?

Кстати, MathRound() округляет к ближайшему целому, то есть, запросто неправомерно завысить может, что может вызвать уже дополнительные последствия.

 

Бедненький. 

 
simpleton:
Не тебе. 
 
Здравствуйте. Подскажите, кто знает - пытаюсь рассчитывать StopLoss от low и high 1го бара, после выставления отложенного ордера, для buy и sell соответственно. Вот только результата ноль, одна ошибка 130 и все. Заранее спасибо. 
if(ticket>0)
           {
            SL = NormalizeDouble(Low[1] - StopLoss*Point, Digits);
            {
               if(OrderModify(ticket, OrderOpenPrice(), SL, 0, 0))
...
//+-------------------------------------------------------------------------+
if(ticket>0)
           {
SL = NormalizeDouble(High[1] + StopLoss*Point, Digits);
            {
               if(OrderModify(ticket, OrderOpenPrice(), SL, 0, 0))
...                     																							
 
Не то нормализуете. 
 
Petiyashaket:
вот точная копия,не понимаю только счетчик for, потому что скопировал его с траллинг стопа ,поэтому и стоплосс прикрутить не могу к фракталам-потому что не умею их искать.короче все упирается в цикл.Вот если обьясните мне его в строке кода да с комментариями как у меня в предыдущем коде ,буду премного благодарен.

"Меня терзают смутные сомнения", и не покидает ощущение, что всё дело в механизме кеширования рыночного окружения.

Для того, чтобы терминалу не надо было "бегать к серверу" по каждому поводу, типа OrdersTotal(), OrderSymbol() и так далее, рыночное окружение копируется в некий кеш, и, похоже, для каждого скрипта он - свой, а скрипт имеет дело уже только с этим кешем. Кеш в течении всего времени исполнения главной функции скрипта НЕ обновляется автоматически даже после успешной отработки функций типа OrderSend(), меняющих рыночное окружение на сервере, поэтому появившийся ордер изнутри скрипта и "не виден", то есть, создаётся иллюзия его отсутствия. В цикле for он просто не обнаруживается, поэтому и OrderModify() не вызывается. Вот такая гипотеза возникла на основе смутных сомнений и непокидающих ощущений.

Описанный кеш можно обновить принудительно с помощью вызова RefreshRates(), например, сразу после вызова OrderSend(). Проверьте, верна ли гипотеза.

Если, кроме всего прочего, RefreshRates() вернёт при этом true, то это будет дополнительным косвенным подтверждением гипотезы.

 
Petiyashaket:
вот точная копия,не понимаю только счетчик for, потому что скопировал его с траллинг стопа ,поэтому и стоплосс прикрутить не могу к фракталам-потому что не умею их искать.короче все упирается в цикл.Вот если обьясните мне его в строке кода да с комментариями как у меня в предыдущем коде ,буду премного благодарен.
Ну раз не понимаешь, то прочти здесь. И здесь. Потом сделай чтобы переменные не теряли значение на каждом тике и нормально организуй цикл.
 
simpleton:

"Меня терзают смутные сомнения", и не покидает ощущение, что всё дело в механизме кеширования рыночного окружения.

Для того, чтобы терминалу не надо было "бегать к серверу" по каждому поводу, типа OrdersTotal(), OrderSymbol() и так далее, рыночное окружение копируется в некий кеш, и, похоже, для каждого скрипта он - свой, а скрипт имеет дело уже только с этим кешем. Кеш в течении всего времени исполнения главной функции скрипта НЕ обновляется автоматически даже после успешной отработки функций типа OrderSend(), меняющих рыночное окружение на сервере, поэтому появившийся ордер изнутри скрипта и "не виден", то есть, создаётся иллюзия его отсутствия. В цикле for он просто не обнаруживается, поэтому и OrderModify() не вызывается. Вот такая гипотеза возникла на основе смутных сомнений и непокидающих ощущений.

Описанный кеш можно обновить принудительно с помощью вызова RefreshRates(), например, сразу после вызова OrderSend(). Проверьте, верна ли гипотеза.

Если, кроме всего прочего, RefreshRates() вернёт при этом true, то это будет дополнительным косвенным подтверждением гипотезы.

Вы принимаете наркотики? 
 
noob1:
Здравствуйте. Подскажите, кто знает - пытаюсь рассчитывать StopLoss от low и high 1го бара, после выставления отложенного ордера, для buy и sell соответственно. Вот только результата ноль, одна ошибка 130 и все. Заранее спасибо. 

Проверьте, не находится ли OrderOpenPrice() слишком близко к SL, и "с той ли стороны цены" ставятся стопы. Вот тут можно почитать:

Цены StopLoss и TakeProfit не могут располагаться слишком близко к рынку. Минимальное расстояние стопов в пунктах можно получить, используя функцию MarketInfo() с параметром MODE_STOPLEVEL. В случае ошибочных, а также ненормализованных стопов генерируется ошибка 130 (ERR_INVALID_STOPS).

В данном случае, то есть, для отложенного ордера, "рынком" выступает его "отложенная цена открытия".

 
tara:
Не то нормализуете. 
Из документации: 
Причина обращения: