[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 320

 
snail09:
Либо считаете все левые скобки, затем все правые, потом сравниваете количества, либо комментируете функции одну за другой, пока не найдете ошибку. На вкус и цвет (оформление исходных текстов) - у всех разные.
там 4 скобки открытия и 4 закрытия, все так. А вот как коменты могут мне помочь не совсем понял
 
Pinki:
там 4 скобки открытия и 4 закрытия, все так. А вот как коменты могут мне помочь не совсем понял

Можно закоментить сначала пользовательские функции, потом внутри старта коментить циклы, логические конструкции... и.т. Уверяю Вас, последовательным отсечением Вы найдете пару своей скобке. А может, еще где и ";" забыли поставить...

А Вы ИФ с ФОР не перепутали?

Звиняюсь, сразу не заметил.

   // Перебор в цикле всех рыночных и отложенных ордеров
   for(int i=0;i<=OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {
         // Если инструмент и магик соответствуют - значит ордер наш
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
            {
            // Подсчитываем только рыночные ордера
            if(_Type==OP_BUY || _Type==OP_SELL) 
               {
               op++;
               }
            }
         }
     }

Сравните с этим фрагментом. Это всего лишь вариант.

 
001:

Кто может объяснить почему не открылся 6-ой ордер на свече? И что сделать чтобы он открылся?

Лог.

2011.11.04 19:42:21 1999.11.04 20:00 RLB_FLAT GBPUSD,H4: open #7 sell stop 0.10 GBPUSD at 1.62233 sl: 1.64443 tp: 1.57089 ok
2011.11.04 19:42:21 1999.11.04 20:00 Tester: #6 deleted due expiration
2011.11.04 19:42:10 1999.11.04 12:00 RLB_FLAT GBPUSD,H4: open #6 sell stop 0.10 GBPUSD at 1.63373 sl: 1.64570 tp: 1.62652 ok
2011.11.04 19:42:09 1999.11.04 08:00 Tester: #5 deleted due expiration
2011.11.04 19:42:06 1999.11.04 00:00 RLB_FLAT GBPUSD,H4: open #5 sell stop 0.10 GBPUSD at 1.63622 sl: 1.64702 tp: 1.63411 ok
2011.11.04 19:42:00 1999.11.02 04:00 Tester: #4 deleted due expiration
2011.11.04 19:41:53 1999.11.01 20:00 RLB_FLAT GBPUSD,H4: open #4 sell stop 0.10 GBPUSD at 1.63365 sl: 1.64917 tp: 1.61097 ok

Четвертый, пятый и шестой отложенники удалены в связи с истечением срока их действия.

Увеличьте срок их жизни или поставите 0 (ноль) см. OrderModify()

 
мmersi:

Четвертый, пятый и шестой отложенники удалены в связи с истечением срока их действия.

Увеличьте срок их жизни или поставите 0 (ноль) см. OrderModify()


Меня смущяет то, что перед истечением 6-го ордера(он истек в 20:00) прошла свеча вниз в 16:00. Это видно на рисунке.
 
mersi:

1. Функция находит в истории ордер с наибольшим тикетом, что и означает последний закрытый ордер (если, конечно, не брать некий исключительный случай, для которго Ваш вариант с максимальным временем закрытия предпочтительнее).

2. Согласно условиям Заказчика, первый ордер открывается с заданными TP/SL и только второй может быть открыт с новыми TP/SL, а из этого следует, что вернуть ноль функция может, лишь если первая сделка была нулевой, но никак не из-за отсутствия в истории закрытых ордеров.

И последнее. В Вашем варианте использование j и еще одного SELECTв функции - излишество.

достаточно :

if (t<OrderCloseTime()) {
         t=OrderCloseTime();
      Profit=OrderProfit()+OrderSwap()+OrderCommission();
  }
   return(Profit);

1. Вы можете положиться 100 % на вашего брокера (или на брокера Заказчика), по поводу его нумерации тикетов? Время всё-таки более устойчивая величина - здесь он может поменять время только вручную подправив историю. ИМХО - лучше использовать время.

2. Если Заказчику потребуется сменить логику, то и функцию вашу возможно придётся переписать.

3. Вы предлагаете

Profit=OrderProfit()+OrderSwap()+OrderCommission();

использовать внутри цикла? Зачем? Можно использовать только раз для уже найденного последнего ордера.

А... Ваш Заказчик не будет тестировать и оптимизировать. Понятно...

 

GlobalVariableSetOnCondition() - объясните пожалуйста, простым языком, что эта функция делает? Описание в справке сильно муторное, не могу понять некоторые моменты?

Устанавливает новое значение существующей глобальной переменной, если текущее значение переменной равно значению третьего параметра check_value. Если переменной не существует, функция сгенерирует ошибку ERR_GLOBAL_VARIABLE_NOT_FOUND (4058) и вернет FALSE. При успешном выполнении функция возвращает TRUE, иначе FALSE. Для того, чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError(). Если текущее значение глобальной переменной отличается от check_value, функция вернет FALSE.
Функция обеспечивает атомарный доступ к глобальной переменной, поэтому она может быть использована для организации семафора при взаимодействии нескольких одновременно работающих экспертов в пределах одного клиентского терминала.

 
fore-x:

GlobalVariableSetOnCondition() - объясните пожалуйста, простым языком, что эта функция делает? Описание в справке сильно муторное, не могу понять некоторые моменты?

Устанавливает новое значение существующей глобальной переменной, если текущее значение переменной равно значению третьего параметра check_value. Если переменной не существует, функция сгенерирует ошибку ERR_GLOBAL_VARIABLE_NOT_FOUND (4058) и вернет FALSE. При успешном выполнении функция возвращает TRUE, иначе FALSE. Для того, чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError(). Если текущее значение глобальной переменной отличается от check_value, функция вернет FALSE.
Функция обеспечивает атомарный доступ к глобальной переменной, поэтому она может быть использована для организации семафора при взаимодействии нескольких одновременно работающих экспертов в пределах одного клиентского терминала.

GlobalVariableSetOnCondition("Имя переменной", устанавливаемое значение, проверяемое значение);

Допустим, у вас есть глобальная переменная GL_Var.

В данный момент она имеет значение 1.0.

Вам нужно проверить имеет ли эта переменная значение 1.0 и, если да, то установить эту переменную равной 2.0

Это будет так:

GlobalVariableSetOnCondition(GL_Var, 2.0, 1.0);

Для того, чтобы обработать возвращаемые значения этой функции, можно вызывать её через if

if (!GlobalVariableSetOnCondition(GL_Var, 2.0, 1.0)) {
   // здесь код обработки, если функция вернула false
   // false она вернёт в случае, если переменная GL_Var не была равна 1.0 во время вызова этой функции
   // или если вообще ещё нет глобальной переменной GL_Var
   }

Перед вызовом функции можете проверить наличие глобальной переменной GL_Var, чтобы избежать ошибки ERR_GLOBAL_VARIABLE_NOT_FOUND

 

Прошу помощи в решении небольшой геометрической задачки. Есть линия с координатами p1 и p2 (на рисунке показана красным цветом). Требуется найти координату p3, которая находится по фибо 38,2% от координаты p2. Сделал так:

if(p2>p1) p3=p2-(p2-p1)*0.382; справедливо для верхней части рисунка

if(p1>p2) p3= p2+(p1-p2)*0.382; справедливо для нижней части рисунка

Можно ли это как-то записать одним уравнением без "if" ?

 

Ну, так и пиши

p3=p2-(p2-p1)*0.382

 
Roger:

Ну, так и пиши

p3=p2-(p2-p1)*0.382


И действительно! Благодарю за помощь.
Причина обращения: