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

 

Есть индикатор, Санёк - автор.

Отмечает уровень фрактала, образованного на баре с объемом, большим чем средний объем последних 3 баров до фрактала.

как его значение в советник извлечь ?

пробую:

h=NormalizeDouble(iCustom(NULL,0,"vfractals",MODE_UPPER, 1),Digits);

l=NormalizeDouble(iCustom(NULL,0,"vfractals",MODE_LOWER, 1),Digits);

не получается.

Файлы:
vfractals.mq4  4 kb
 
NormalizeDouble(iCustom(NULL,0,"vfractals",MODE_UPPER, 1),Digits); 1. MODE_UPPER и MODE_LOWER это вы берете значения из первого и второго индикаторных буферов (у вас нулевой и первый) 2. Цифра 1 значит что вы берете значение [1]-го элемента (на прошлом баре то есть)
 
ilunga:
NormalizeDouble(iCustom(NULL,0,"vfractals",MODE_UPPER, 1),Digits); 1. MODE_UPPER и MODE_LOWER это вы берете значения из первого и второго индикаторных буферов (у вас нулевой и первый) 2. Цифра 1 значит что вы берете значение [1]-го элемента (на прошлом баре то есть)

Спасибо. получилось
 

Перенесено.

Pavel447 02.03.2011 10:57
Добрый день!
Может у кого то есть советник(или скрипт), который при открытии позиции автоматически выставляет СЛ, ТП,Трейлинг+перевод в БУ при выходе в профит...?
Заранее благодарен!)

 
Перенесено.
dimeon 02.03.2011 11:41
sammi61:

Помогите добавить в код советника динамический лот, что бы лот увеличивался с увеличением депо, или в процентах от депозита?
если лот равен 0, то включается автолот, ели равен значению, то лот фиксированный
Прикрепленные файлы:
FiboWave_v1_1lavtolot.mq4 (9.26 KB) удалить
 
artmedia70:
Массивы можно использовать в очень многих случаях и для реализации множества различных задач. Так какой же пример нужен???
  if (Cls_B[i]||Cls_S[i]) LotCt=NormalizeLot(OrderLots()/(4-i)); 
как прописать [i] ? Вроде бы объявлял как переменную..., выдает ошибку компилляции. Не пойму ... Просит целочисленное значение, но массив можно объявить и переменной?!
 

100yan:
как прописать [i] ?

Просит целочисленное значение, но массив можно объявить и переменной?!

поконкретней вопрос.

массив это переменные с одинаковым именем но разным номером

 
100yan:
как прописать [i] ? Вроде бы объявлял как переменную..., выдает ошибку компилляции. Не пойму ... Просит целочисленное значение, но массив можно объявить и переменной?!
любая конструкция в скобках [] должна иметь тип данных int.
 

Подскажите, что значит такая вот хрень в логах? Как можно этого избежать? Эксперт торгует с помощью этого индюка, после ошибки торговля замирает пока не перезагрузишь терминал так как при перезагрузке эксперта может снова вылететь.

22:39:53 +ZigZag_Levels CLJ1,M5: uninit reason 3
22:39:53 Zigzag CLJ1,M5: uninit reason 1

22:39:53 Zigzag CLJ1,M5: removed

Может это из-за того, что я пользуюсь терминалом на удаленном серваке и у себя на компе одновременно?

 
todem:

Привет всем! У меня вопрос такой: в этой функции для двух позиций (бай и селл) выставляется стоплосс таким образом что для селла SL=цена открытия бай+18пунктов, и для бая наоборот:

бла-бла-бла...

цены открытия противоположных поизций получаем из ф-ции:

бла-бла-бла...

ну а функции ModifyOrder знаем как стандартную КИМИВ-скую, ею устанавливаем рассчитанные стоплоссы...

Вопрос в том что он советник устанавливает стоплосс только для селла, а для бая не устанавливает??? кто что думает? буду признателен.


void SimpleLock(string sy="", int mn=-1) {
  double po, pp, ops1=0, ops2=0, opb;
  int    i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<=k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        po=MarketInfo(OrderSymbol(), MODE_POINT);
        if (mn<0 || OrderMagicNumber()==mn) {
          if (OrderType()==OP_SELL) {
            opb=OrderStopLoss();                            // Значение стопа позиции до модификации = (0???)
            ops2=NormalizeDouble(OrderPrice(OP_BUY),Digits);
            if (ops2>0 && opb!=0) {
                ModifyOrder(-1, ops2+18*po, -1);
              }
            
          }
          if (OrderType()==OP_BUY) {
            opb=OrderStopLoss();
            ops1=NormalizeDouble(OrderPrice(OP_SELL),Digits);
            if (ops1>0 && opb!=0) {
                ModifyOrder(-1, ops1-18*po, -1);
              }
            
          }
        }
      }
    }
  }
}

Если стоп не установлен, то и модифи не вызывается...

цены открытия противоположных поизций получаем из ф-ции:

double OrderPrice(int type) {
   double price;
   int i, k=OrdersTotal();
      
      for (i=0; i<k; i++) {
         if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
            if (OrderType()==type) {
            price=OrderOpenPrice();  // Значение цены открытия в списке ордеров терминала позиции с типом type и индексом i
            }
         }
      }
   return(price);  // Возвращает цену открытия последней в списке ордеров позиции с типом type и индексом не более k-1
}

Уверены, что вам возвращается цена открытия именно нужного ордера?

Причина обращения: