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

 
sss2019:

А можно как нибудь сделать чтобы на текущем баре было открыто не более одного ордера? То есть мне нужно чтобы на текущем фрактале открылся один ордер, но не более, и на следующем и т.д.

Можно такое как нибудь реализовать?

Можно. Только вопрос двоякий. Если открывать на текущем баре, то это нулевой бар. А фрактал образуется как минимум на втором.

Сохраните в переменную время бара фрактала и, если по этому фракталу с таким временем уже открыта позиция, то больше по нему не открывать. Как только образуется новый фрактал, время его бара изменится, тогда открываете новую позицию и, после успешного её открытия, сохраняете в переменной новое время нового фрактала.

 

Не хочу показаться назойливым. Помогите с моим вопросом. Не могу закрыть ордер. Выдает ошибку неправильный тикет. Проблема в тикете, как его вызвать и закрыть ордер? Спасибо.

Я пишу советник так чтобы после sell открывался после закрытия buy и наоборот, но почему-то закрывается только первый ордер, а остальные нет


OrderSend(Symbol(),OP_SELL,1,Bid,3,0,0,NULL,12345,CLR_Blue);

Выдает ошибку неправильный тикет. Проблема в тикете, как его вызвать и закрыть ордер? Спасибо.

 

Здравствуйте! Как в окне, на котором прикреплен советник, как открылся рыночный ордер SELL вывести красную Правую ценовую метку цены открытия этого ордера, на том баре, на котором он открылся?

Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,SL,TP);
 
kolaider:

Не хочу показаться назойливым. Помогите с моим вопросом. Не могу закрыть ордер. Выдает ошибку неправильный тикет. Проблема в тикете, как его вызвать и закрыть ордер? Спасибо.

Я пишу советник так чтобы после sell открывался после закрытия buy и наоборот, но почему-то закрывается только первый ордер, а остальные нет


OrderSend(Symbol(),OP_SELL,1,Bid,3,0,0,NULL,12345,CLR_Blue);

Выдает ошибку неправильный тикет. Проблема в тикете, как его вызвать и закрыть ордер? Спасибо.

OrderSend(Symbol(),OP_SELL,1,Bid,3,0,0,NULL,12345,0,CLR_Blue);

У вас пропущен параметр экспирации (красным выделил)

Вам нужно, чтобы после закрытия Бай открывался Селл и наоборот - после закрытия Селл закрывался Бай?

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

Чтобы закрыть ордер нужно сначала его выбрать, взять его тикет и закрыть.

 
kolyango:

Здравствуйте! Как в окне, на котором прикреплен советник, как открылся рыночный ордер SELL вывести красную Правую ценовую метку цены открытия этого ордера, на том баре, на котором он открылся?


bool ObjectCreate( string name, int type, int window, datetime time1, double price1, datetime time2=0, double price2=0, datetime time3=0, double price3=0)

Создание объекта с указанным именем, тип и начальные координаты в указанном подокне графика. Число координат, связываемых с объектом, может быть от 1 до 3 в зависимости от типа. При успешном создании объекта функция возвращает TRUE, иначе FALSE. Чтобы получить дополнительную информацию об ошибке, необходимо вызвать функцию GetLastError().
Объекты с типом OBJ_LABEL игнорируют координаты. Используйте функцию ObjectSet() для установки свойств OBJPROP_XDISTANCE и OBJPROP_YDISTANCE.
Замечания: нумерация подокон графика (если на графике есть подокна с индикаторами) начинается с 1. Главное окно графика есть всегда и имеет индекс 0.
Координаты должны передаваться парами - время и цена. Для примера, объекту OBJ_VLINE требуется только время, но также нужно передать и цену (любое значение).
Параметры:
name - Уникальное имя объекта.
type - Тип объекта. Может быть любым из типов объектов.
window - Индекс окна, в которое будет добавлен объект. Индекс окна должен быть большим или равным 0 и меньшим, чем WindowsTotal().
time1 - Время первой координаты.
price1 - Цена первой координаты.
time2 - Время второй координаты.
price2 - Цена второй координаты.
time3 - Время третьей координаты.
price3 - Цена третьей координаты.
Пример:
  // новый объект Text
    if(!ObjectCreate("text_object", OBJ_TEXT, 0, D'2004.02.20 12:30', 1.0045))
    {
     Print("error: can't create text_object! code #",GetLastError());
     return(0);
    }
  // новый объект TextLabel
    if(!ObjectCreate("label_object", OBJ_LABEL, 0, 0, 0))
    {
     Print("error: can't create label_object! code #",GetLastError());
     return(0);
    }
  ObjectSet("label_object", OBJPROP_XDISTANCE, 200);
  ObjectSet("label_object", OBJPROP_YDISTANCE, 100);
 

artmedia70:


Можно. Только вопрос двоякий. Если открывать на текущем баре, то это нулевой бар. А фрактал образуется как минимум на втором.

Сохраните в переменную время бара фрактала и, если по этому фракталу с таким временем уже открыта позиция, то больше по нему не открывать. Как только образуется новый фрактал, время его бара изменится, тогда открываете новую позицию и, после успешного её открытия, сохраняете в переменной новое время нового фрактала.


А как сохранить, в глобальную переменную? Я сделал обычную переменную но она кажется не сохраняется и ордера так и продолжают открываться. ВОт

int start()
  {
  double MyPoint = Point;
  if(Digits == 3 || Digits == 5)
    {
    MyPoint = Point * 10;
    }
  
   double upperfractal;
   int upperi;
//----
   for(upperi=1;upperi<Bars;upperi++)
     {
     upperfractal=iFractals(Symbol(), Period(), MODE_UPPER, upperi); if (upperfractal>0) break;
     }
     
   datetime opentime;
     
   if(upperfractal>0 && upperi > 2 && opentime != Time[upperi])
     {
     if(OrderSend(Symbol(),OP_BUYSTOP,Lot,upperfractal + 10 * Point,3,0,0,"comment",1354453,0,Green) == true)
       {
       opentime = Time[upperi];
       }else
       {
       Alert("",GetLastError());
       }
     }

//----
   return(0);
  }

Переменная opentime

Помогите кто нибудь пожалуйста.

Пробовал даже делать переменную глобальной, но все равно открывается много сделок, как будто переменная каждый раз сбрасывается.

datetime opentime = 0;

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  double MyPoint = Point;
  if(Digits == 3 || Digits == 5)
    {
    MyPoint = Point * 10;
    }
  
   double upperfractal;
   int upperi;
//----
   for(upperi=1;upperi<Bars;upperi++)
     {
     upperfractal=iFractals(Symbol(), Period(), MODE_UPPER, upperi); if (upperfractal>0) break;
     }
     

     
   if(upperfractal>0 && upperi > 2 && opentime != Time[upperi])
     {
     if(OrderSend(Symbol(),OP_BUYSTOP,Lot,upperfractal + 10 * Point,3,0,0,"comment",1354453,0,Green) == true)
       {
       opentime = Time[upperi];
       }else
       {
       Alert("",GetLastError());
       }
     }

//----
   return(0);
 
T-G:

подскажите как справится с банальной проблемой - у меня образовалось дыра в истории по евре июнь 2011 и сразу сентябрь и немного сентября потеряно

в папке \terminal\history\downloads\EURUSD есть такие файлы

EURUSD_2011_06_81625bcefc91bf488a04d5a1dae0c93f
EURUSD_2011_09_2557787db3eb2fe87073c783f21cdd66

EURUSD_2011_10_15793a4a4f9d001b78a82e248872bc3b

пробовал несколько терминалов разных брокеров, в том числе родной MQ. так же пробовал на разных машинах где XP и Win7. максимальных баров в истории стоит по максимуму. Пробовал удалять symbols.raw и symgroups.raw и качать по новой - не помогло.


Интересно, а Вам принципиально иметь историю именно за этот промежуток?
 
nadya:
Интересно, а Вам принципиально иметь историю именно за этот промежуток?
а как вы думаете? раз спрашиваю то да!
 
T-G:
а как вы думаете? раз спрашиваю то да!
Ну тогда просите историю у людей-накопителей.
 
sss2019:


А как сохранить, в глобальную переменную? Я сделал обычную переменную но она кажется не сохраняется и ордера так и продолжают открываться. ВОт

Переменная opentime

Помогите кто нибудь пожалуйста.

Пробовал даже делать переменную глобальной, но все равно открывается много сделок, как будто переменная каждый раз сбрасывается.

OrderSend возвращает целочисленное значение, это не булева функция, будьте внимательны