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

 
Vinin:

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

И неплохо было бы сделать расчет истории, но это конечно дело вкуса. И работу с объектами более корректно сделать. На каждом тике создаются (или формируют ошибку) объекты с теми же именами.

шапку исправил.

с буфером:

     UP_1Buffer[0] = uitog1v;
     UP_2Buffer[0] = uitog2v;
     UP_3Buffer[0] = uitog3v;
     DOWN_1Buffer[0] = ditog1v;
     DOWN_2Buffer[0] = ditog2v;
     DOWN_3Buffer[0] = ditog3v;

догодался.

Огромное спасибо за помощь.


А на счет ваших предложений, я бы непротив их сделать. но я сам их не сделаю к сожелению.

 
artmedia70:

Попробуйте словами описать то, что вы тут написали:

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

Остальное после этого смотреть не стал...

ЗЫ и не пытайтесь, даже не думайте, что в одном цикле возможно написать нормальный советник...

Идея такова:

Точка входа в рынок: в любое время, если нет никаких ни отложенных, ни, тем более открытых позиций.

Робот открывает 2 отложенные позы, СС БС на одинаковом расстоянии в пунктах от текущей цены (это пользовательская переменная PriceDistance).

Отложники оба с одинаковыми ТП, СЛ, ТС (как в зеркальном отражении от текущей цены.

И оба на одинаковое время (в перспективе переменная "TimeStop").

Всё....

На практике: закрываются предыдущие позиции (либо обе с истечением времени, либо об СЛ или ТП- не важно), терминал освободился, сразу после этого открываются такие же с теми же параметрами, но, отталкиваясь от текущей цены, в новом диапазоне. Далее- по циклу.

Идея примитивна, 100% сливатор, но я планирую в этом направление двинуть и подвязать к прочим сигналам, например Вольюмс при определенных значениях на определенных таймфреймах....

Поэтому прога нужна по-зарез....

Вот и задался написанием...

 
Доброго вечера! Написал тут прастейшую конструкцию, для подсчета имеющегося профита, на каждом тике. Так вот, она не работает! 10 минут смотрел,ел код глазами . Ошибки не вижу. Вот код
//----
        double Profit;
for ( i=OrdersTotal();i>0;i--){ OrderSelect(i-1,SELECT_BY_POS );

if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_SELL ||
      
 OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_BUY){
 
  
 Profit=Profit+OrderProfit( ) ;Alert ("i ", i ," Profit ", Profit);}}
 
 
//----
Магик нумбер верный, четырежды провирял. Скобки,все чего мог догадаться посмотреть- все вроде же верно. Может, я ордертипе не так пишу/сравниваю? Справку смотрел. Короче,помогите пожалуста! Без вас никак!! Разьясните, что же может быть???
 
А вы знаете, по отдельности-то все три условия работают!!
 double Profit;
for ( i=OrdersTotal();i>0;i--){ OrderSelect(i-1,SELECT_BY_POS );

if( OrderType( ) ==OP_SELL ){Alert ("i ", i ," OP_SELL ", Profit);}

if( OrderSymbol()==Symbol()){Alert ("i ", i ," Symbol() ", Profit ,Symbol(), OrderSymbol());}

if( OrderMagicNumber( )==2000  ) {Alert ("i ", i ," OrderMagicNumber( ) ", Profit , OrderMagicNumber( ));}



if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_SELL ||
      
 OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_BUY){
 
  
 Profit=Profit+OrderProfit( ) ;Alert ("i ", i ," Profit ", Profit);}}
Я, в ообщем, вообще в шоке и непонятках!!
 
dkfl.zrjdktdbx:
Доброго вечера! Написал тут прастейшую конструкцию, для подсчета имеющегося профита, на каждом тике. Так вот, она не работает! 10 минут смотрел,ел код глазами . Ошибки не вижу. Вот код Магик нумбер верный, четырежды провирял. Скобки,все чего мог догадаться посмотреть- все вроде же верно. Может, я ордертипе не так пишу/сравниваю? Справку смотрел. Короче,помогите пожалуста! Без вас никак!! Разьясните, что же может быть???


Несколько скобок не хватает

double Profit=0;
for ( i=OrdersTotal();i>0;i--){ OrderSelect(i-1,SELECT_BY_POS );

if( ( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_SELL ) ||
      
( OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_BUY ) ){
 
  
 Profit=Profit+OrderProfit( ) ;Alert ("i ", i ," Profit ", Profit);}}
 

Вроде бы так. Хотя лучше делать проще

double Profit=0;
for ( i=OrdersTotal();i>0;i--){ 
   OrderSelect(i-1,SELECT_BY_POS );
   if(OrderSymbol()==Symbol()) {
      if( OrderMagicNumber( )==2000 && OrderType( ) ==OP_SELL )  Profit+=OrderProfit( );
      if( OrderMagicNumber( )==1000 && OrderType( ) ==OP_BUY  )  Profit+=OrderProfit( );
   }
   Alert ("i ", i ," Profit ", Profit);
}
 

Возник вот такой вопрос - в МТ4: (2/3*9 == 2*9/3) ?

         Comment(
            "\n",
            "\n", "2/3*9        = ", 2/3*9,
            "\n", "2*9/3        = ", 2*9/3,
            "\n",
         "\n" );


Спасибо!

 
chief2000:

Возник вот такой вопрос - в МТ4: (2/3*9 == 2*9/3) ?


Спасибо!


А в чем дело?

Проверьте на калькуляторе - узнаете.

См. в документации - порядок вычисления выражений.

Вы бы хоть учебник почитали...

"Легко заметить, что порядок вычисления выражений в программе аналогичен порядку подобных вычислений в математике, но отличается вычислением типов значений промежуточных выражений, что существенно влияет на конечный результат вычислений. В частности (в отличие от правил, принятых в математике), немаловажное значение имеет порядок операндов в выражении. Чтобы продемонстрировать это, рассмотрим небольшой пример. Задача 6. Вычислить значения выражений А/В*С и А*С/В для целых чисел А, В и С.


Интуитивно ожидается, что результат вычислений в обоих случаях будет одинаковым. Однако это утверждение справедливо только в отношении действительных чисел. При вычислении значений выражений, составленных из операндов целого типа, очень важен промежуточный результат. В таком случае последовательность операндов имеет принципиальное значение:

int A = 3; // Значение целого типа
int B = 5; // Значение целого типа
int C = 6; // Значение целого типа
int Res_1 = A/B*C; // Результат 0 (ноль)
int Res_2 = A*C/B; // Результат 3 (три)

Проследим процесс вычисления выражения A/B*C:

1. Сначала (слева направо) будет вычислено значение выражения A/B. В соответствии с указанными выше правилами значением выражения (3/5) будет целое значение 0 (ноль).

2. Вычисление выражения 0*С (ноль умножить на С). Результат - целое значение 0 (ноль).

3. Общий результат (значение переменной Res_1) - целое значение 0 (ноль).

Теперь посмотрим, как будут развиваться события при вычислении выражения A*C/B.

1. Вычисление A*C. Значением этого выражения будет целое число 18 (3*6=18).

2. Вычисление выражения 18/B. Ответ очевиден: (18/5) после отбрасывания дробной части получится целое число 3(три).

3. Общий результат (значение переменной Res_2) - целое значение 3 (три).

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

В разделе Операторы рассматривается понятие и общие свойства операторов, в главе Операторы раскрываются собственные свойства каждого оператора."

 
Скажите FileFlush это все равно что сохранение файла?
 
Roman.:


А в чем дело?

Проверьте на калькуляторе - узнаете.

Проверил - и Casio, и даже Майкрософтовкий калькулятор говорят что 2/3*9=6.


 
chief2000:

Проверил - и Casio, и даже Майкрософтовкий калькулятор говорят что 2/3*9=6.



Ну. Проблема-то в чем?
Причина обращения: