[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 279

 

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

верт линию хотел провести используя ObjectCreate... если это можно сделать без времени, то что нужно использовать?
 
waitra >>:

А может быть есть такая функция, которая бы просто определила, что «в истории советника не т еще ни одного ордера» ? - этого было бы достаточно

Это я не знаю. Может кто-ниб из присутствующих ответит ? 

Хотя, если попробовать переделать ф-ю И.Кима ? Вот эту:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru            |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                  |
//|  Описание : Возвращает количество позиций.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                            |
//|    sy - наименование инструмента   (""   - любой символ,  |
//|                                     NULL - текущий символ)          |
//|    op - операция                   (-1   - любая позиция)       |
//|    mn - MagicNumber                (-1   - любой магик)               |
//+----------------------------------------------------------------------------+
int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), kp=0;
  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) kp++;
          }}}}}  return(kp);}

Т.е. вместо  MODE_TRADES взять MODE_HISTORY - т.е. ордер выбирается среди закрытых и удаленных ордеров

Тогда (меняем название ф-и) : 

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru            |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                  |
//|  Описание : Возвращает кол-во ордеровиз истории счета  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                           |
//|    sy - наименование инструмента   (""   - любой символ, |
//|                                     NULL - текущий символ)        |
//|    op - операция                   (-1   - любая позиция)       |
//|    mn - MagicNumber                (-1   - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfPos_HISTORY (string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), kp=0;
  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY )) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) kp++;
          }}}}}  return(kp);}

Попробуйте, - будет работать или нет ?

 

Друзья, добрый день.


Подскажите, пожалуйста, такую вещь.


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

я пока что умею только классифицировать сигналы, когда свечка закрылась/открылась выше/ниже средней...

( iMA( .....) >Close[1] или iMA(....) >Open[0] )

а как сделать так, чтобы не дожидаться закрытия текущей и открытия следующей, а войти еще при текущей свечке, если она уже выше/ниже МА ???


Заранее большое спасибо.

 
Morzh09 >>:

Друзья, добрый день.


Подскажите, пожалуйста, такую вещь.


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

я пока что умею только классифицировать сигналы, когда свечка закрылась/открылась выше/ниже средней...

( iMA( .....) >Close[1] или iMA(....) >Open[0] )

а как сделать так, чтобы не дожидаться закрытия текущей и открытия следующей, а войти еще при текущей свечке, если она уже выше/ниже МА ???


Заранее большое спасибо.

А чем не нравится:

iMA(....) >Open[0]  ? - нуль - это текущая свеча.

 
rid >>:

А чем не нравится:

iMA(....) >Open[0] ? - нуль - это текущая свечаю

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

если используем мои критерии открытия, то такие движения можем прозевать...

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

 

Вот так может :

if (  iMA(.... .... , 1) >Close[1]  && iMA(.... ... , 0) < Open[0]  ) // продажа

(Если МА на предыд. баре больше цены закытия предыд. бара, и МА на текущем баре  становится менньше цены открытия текущего бара, то - продаем)

 

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

Код

nt f_Open_Ord(int Tip)
{
int Ticket, // Номер ордера
MN; // MagicNumber

double SL, // StopLoss (относит.знач.цены)
TP; // TakeProf (относит.знач.цены)
//--------------------------------------------------------------- 3 --
while(g_Mas_Tip[Tip]==0) // До тех пор, пока ..
{ //.. не достигнут успех
if (SL<g_Level_new) // Если меньше допустимого..
SL=(g_Level_new+20); // .. то допустимый
if (TP<g_Level_new)
// Если меньше допустимого..
TP=(g_Level_new+20); // ..то допустимый
MN=TimeCurrent(); // Простой MagicNumber
f_Inform(13,Tip); // Сообщение о попытке откр
if (Tip==0) // Будем открывать Buy
{
SL=Bid - SL*Point; // StopLoss (цена)
SL=NormalizeDouble(SL,Digits);
TP=Bid + TP*Point; // TakeProfit (цена)
TP=NormalizeDouble(TP,Digits);
Ticket=OrderSend(Symbol(),0,g_Lots_New,Ask,5,1.46500,1.47500,"",MN);
err=GetLastError();
Comment("ошибка номер ",err);
if (Ticket>0) f_Inform(4);
//if (Ticket<0) f_Inform(25);

Код переработан.Все корректно работает.Думаю, что ошибка не в коде. ДЦ-Broco/

 

Sorri, поспешил. Значения 1.46500 и 1.47500 в функции OrderSend нужно заменить на SL и TP соответственно

 
VNG писал(а) >>

Sorri, поспешил. Значения 1.46500 и 1.47500 в функции OrderSend нужно заменить на SL и TP соответственно

А чему равны SL и TP? Если нулю, как в приведенном коде, то все правильно. Должна формироваться ошибка

 

Стопы берутся из глобальной переменной g_Level_new, которая вычисляется так g_Level_new=MarketInfo(Symbol(),MODE_STOPLEVEL )

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