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

 
forexnew:

Как изобразить:

/

в string?

Например:

string path=TerminalPath()+"/logs/"+tekTime+".log";

выдает ошибку, а если убрать слэш "/"

string path=TerminalPath()+"logs"+tekTime+".log";

- ошибки нет.




Читать тут и тут.

 
ZZZEROXXX:

может посмотреть еще что возвращает IsTradeAllowed() ?

Поможите пожалуйста. Пытаюсь строить трендовые по двум точкам привязанным к барам на N баров вперед от последней точки. Т.е. входящие - время-цена первой и второй точки, и N выраженное в количестве баров вперед (флажок луч = false). Если вторая точка предположим лежит на баре 1 от текущего бара 0, и мне нужно нарисовать от нее на 10 баров вперед, как мне вычислить время и цену бара из будущего?

Эта работает тоже, если Вы вдруг, компилируя советник, попадаете случайно на занятый торговый поток. Я ищу способ, как выводить в комментах советника сообщения из логов о request . Похоже практически такой задачей мало кто задавался.
 
PapaYozh:


Читать тут и тут.

Спасибо!
 

Неужели уважаемые гуру не помогут?

pvm117 20.10.2011 18:26

Добрый день!

В качестве первого опыта решил реализовать следующий алгоритм: можно ожидать, что после сближения линий Боллинджера в узкий коридор через какое-то время будет резкое движение рынка вверх или вниз. В советнике анализирую состояние линий Боллинджера и при их близком сближении (Delta пунктов) ставим отложенный ордер на продажу в нижнем направлении (на StepOpen пунктов ниже нижней линии) в надежде что рынок резко пойдет именно в эту сторону. Если рынок пошел в другую сторону, то просто удаляем этот ордер.

extern double Delta=800.0;              // Ширина канала, которую мы считаем достаточно узкой чтобы ожидать скоро серьезного движения в одну из сторон
extern double StepOpen=150.0;           // Отступ от линии Боллинджера  для открытия отложенного ордера
extern double TP=350.0;                 // Take Profit
extern double SL=400.0;                 // Stop Loss

int start()
  {
   double T1=iBands(NULL,0,20,2,0,PRICE_CLOSE,MODE_UPPER,0);  // верхняя линия Боллинджера
   double T2=iBands(NULL,0,20,2,0,PRICE_CLOSE,MODE_LOWER,0); // нижняя линия Боллинджера
   if ((Ask>T1+StepOpen*Point)&&OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==true) OrderDelete(0); // если рынок пошел вверх – то удаляем отложенный ордер
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==true) return(0); // если есть ранее открытый ордер – прекращаем выполнение текущей итерации советника
   if (T1-T2<Delta*Point) {               // если линии Боллинджера сблизились ближе чем на Delta пунктов начинаем операцию открытия ордера
      double PriceOpen=NormalizeDouble(T2-StepOpen*Point,5);  // вычисляем цену открытия
      double StopLoss=NormalizeDouble(T2-StepOpen*Point+SL*Point,5); // вычисляем StopLoss
      double TakeProfit=NormalizeDouble(T2-StepOpen*Point-TP*Point,5); // вычисляем TakeProfit
      OrderSend(Symbol(),OP_SELL,0.1,PriceOpen,5,StopLoss,TakeProfit,0,0,0,Green); //  открываем ордер на продажу
            }
   return(0);
  }
Алгоритм работает нестабильно, иногда открывает по два ордера через короткий промежуток времени, постоянно выдает ошибки OrderSend Error 130 и OrderSend Error 138, а удаление открытых ордеров в случае движения рынка в другую сторону вообще не срабатывает.

Большая просьба помочь советом! Спасибо!

 
pvm117:

Неужели уважаемые гуру не помогут?

pvm117 20.10.2011 18:26

Добрый день!

В качестве первого опыта решил реализовать следующий алгоритм: можно ожидать, что после сближения линий Боллинджера в узкий коридор через какое-то время будет резкое движение рынка вверх или вниз. В советнике анализирую состояние линий Боллинджера и при их близком сближении (Delta пунктов) ставим отложенный ордер на продажу в нижнем направлении (на StepOpen пунктов ниже нижней линии) в надежде что рынок резко пойдет именно в эту сторону. Если рынок пошел в другую сторону, то просто удаляем этот ордер.

Алгоритм работает нестабильно, иногда открывает по два ордера через короткий промежуток времени, постоянно выдает ошибки OrderSend Error 130 и OrderSend Error 138, а удаление открытых ордеров в случае движения рынка в другую сторону вообще не срабатывает.

Большая просьба помочь советом! Спасибо!

OrderSend(Symbol(),OP_SELL,0.1,PriceOpen,5,StopLoss,TakeProfit,0,0,0,Green); //  открываем ордер на продажу

Это не отложенный, а рыночный ордер.

соответственно цена открытия у него должна быть другой, и он не может быть удален (OrderDelete), а только закрыт

 

Приветствую всех знатоков и просто опытных читателей этой ветки! Ну и просто всех, кто сможет мне помочь=)

Какой наиболее простой и "правильный" способ добиться периодичности? То есть, если упрощать, я хочу чтобы раз в 15 минут автоматически выполнялось некое действие.

В моем случае - это сохранение файла на диск с некоторыми статистиками. Сейчас у меня есть скрипт, который выполняет требуемое, и это буквально 20 строк кода. Как же заставить эти 20 строк повторяться через определенные интервалы времени? Как я успел понять, никаких временных таймеров в MQL нет... Нужно ли использовать эксперта, который будет делать какую-то проверку каждый тик?...

Надеюсь на вашу помощь и подсказки)

 
Привет! Подскажите, есть ли другой способ задать таймфрейм мультивалютного советника, кроме как в индикаторе посредством M_30 H_1, D_1 и так далее?
 
skyjet:
Привет! Подскажите, есть ли другой способ задать таймфрейм мультивалютного советника, кроме как в индикаторе посредством M_30 H_1, D_1 и так далее?

а в чем проблема?
 

Здравствуйте.

Тут вот такой значит вопрос: посоветуйте как использовать жёлтую линию, как прогноз моментума и белую - как прогноз ОсМы на длинном восходящем тренде старшего фрейма ?

Тут трудно определить амплитуду между пиками волнушек, вообщем посоветуйте куда копать дальше ;)


 
Sancho77:

Выбрать первую, из открытых.

Нужно это все, чтобы среди открытых позиций проверять расстояние в пунктах между первой открытой позицией и последней открытой позицией.

На скорую руку переписал, может поможет? Не проверял...

double PriceOpenFirstPos(string sy="", int op=-1, int mn=-1) {
   datetime t=TimeCurrent();
   double   r=0;
   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=="") {
            if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
               if (op<0 || OrderType()==op) {
                  if (mn<0 || OrderMagicNumber()==mn) {
                     if (OrderOpenTime()<t) {
                        t=OrderOpenTime();
                        r=OrderOpenPrice();
                        }
                     }
                  }
               }
            }
         }
      }
   return(r);
}

Попробуйте так...

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