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

 
HoBu4ek >>:
Подскажите пожалуйста, как сделать чтоб советник открывал ордер на нескольких инструментах одновременно? Заранее благодарен!

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

 
Drugoy писал(а) >>

Господа, подскажите, пожайлуста, новичку! Скачал учебник MQl4BookRussian.chm (автор Сергей Ковалёв), проблема в том что распечатывать из этого формата получается очень коряво. Пробывал копированием перебросить этот текст в формат doc - пропадают картинки. Подскажите, есть ли этот учебник в формате, удобном для распечатки (читать с монитора - глаза устают)?

Попробуйте онлайн-версию учебника прямо с сайта - https://book.mql4.com/ru/. И в doc можно будет перекинуть без проблем как угодно.

 
Reshetov >>:

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

С торговым потоком мне все понятно, но как сделать чтобы последовательно на 3-х инструментах с минимальным интервалом открывались сделки (по алгоритму советника открытие должно начатся в определенную секунду сразу на трех валютах)?? Если не сложно, не могли бы выложить фрагмент кода в качестве примера? Буду очень благодарен!

 
Dimoncheg >>:

int start()
  {
  if (OrdersTotal() == 0 
  && TimeDayOfWeek(TimeCurrent()) == 5
  && TimeHour(TimeCurrent()) == 12
  && TimeMinute(TimeCurrent()) == 30
  && TimeSeconds(TimeCurrent()) >= 00)
  {
  Alert("Тра ляля");  
  OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"sell",999999,0,Red);
  }
   

Никто не подскажет почему ордер сдесь не открывается? Че я не того придумал?

Если это весь код, он даже не компелируется. Если вместо Lot Подставить цифру советник прекрасно работает.

 

 
HoBu4ek >>:

С торговым потоком мне все понятно, но как сделать чтобы последовательно на 3-х инструментах с минимальным интервалом открывались сделки (по алгоритму советника открытие должно начатся в определенную секунду сразу на трех валютах)?? Если не сложно, не могли бы выложить фрагмент кода в качестве примера? Буду очень благодарен!

Я так понял вам просто надо чтобы открылось 3 ордера по разным инструментам? А почему бы не сделать флаговую переменную ну например

В глобальных переменных создаем

int flag=0;
string Symb;

///////////////

далее

int start()
{
if (условие открытия)
{flag=1;}

if (flag==1)
{
Symb="EURUSD";
OrderSend(Symb,...)///Открываем, переносим флаг во 2 состояние для открытия след ордера и 
flag=2; ///выходим тк больше мы ни чего не можем сделать
return(0);
}

if (flag==2)
{
Symb="AUDUSD";
OrderSend(Symb,...)
flag=3;
return(0);
}

if (flag==3)
{
Symb="USDJPY";
OrderSend(Symb,...)
flag=0;//Возвращаем флаг в начальное состояние..
return(0);
}
return(0);}


Еще не плохо бы добавить проверку открытия и только после того как проверка успешно прошла перемещать флаг.

 
Inzer >>:

Если это весь код, он даже не компелируется. Если вместо Lot Подставить цифру советник прекрасно работает.


Проверьте тип данных Lot. Должен быть double.

 
TheXpert >>:

Вобщем навскидку. Особо в условия не въезжал, но во втором варианте пересечения вроде нет.

И еще -- функция OrderSend возвращает тикет типа int поэтому правильно проверять на успех так:

В Вашем случае надо проверить на неправильность:

______

Да, не знаю как другим, но по мне слово "спецы" звучит как-то издевательски. Может поэтому Вам столько времени не отвечали? ;)

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

Да как скажете........ не называть так не называть..... Хотя спецы это сокращённое от специалисты(люди владеющие знаниями, учителя так сказать).

Мне всё равно......Я при таком обращении имел ввиду только положительное и доброе........

Ну да ладно........

В самом начале этой ветки я спрашивал про МАшку. Ответы получил очень толковые. Щас опять вернулся к ней.

Возникла одна задумка.....

int start()
  {
//----
    double MA_0=iMA(NULL, 0, pMA, pSh, mode, price,0);
    double MA_1=iMA(NULL, 0, pMA, pSh, mode, price,1);
        
    if(MA_1< Open[1] && MA_0>Open[0])
     if(CheckOrders(OP_SELL))//продажа
      {
       if(!OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 0, 0, NULL, MagicNumber))
         Print("Не открыт ордер Buy. Ошибка №", GetLastError()); 
       }
       
    if(MA_1>Open[1] && MA_0<Open[0])
     if(CheckOrders(OP_BUY))//покупка
      {
       if(!OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0, 0, NULL, MagicNumber))
         Print("Не открыт ордер Sell. Ошибка №", GetLastError()); 
       }
//----
   return(0);
  }

Решил немного подправить торговые условия. НО неполучилось(((((((( Я хотел поставить open_1 и open_0 (цена открытия на первом баре и

цена открытия на нулевом баре) При проверке выдало ошибки, пришлось вернуться к первоначальному варианту(который и привожу выше).

Как мне разъяснили open[1] - это вызов ячейки массива с именем open и с индексом [1]. Всё это хорошо...... но только надо цену открытия на 1(2,0) баре

Подскажите чайнику.....)))))))).....

 
Как отследить, что сработал отложенный ордер(например, по buy) ?Лучше искать его по id в истории или есть короче вариант?
 
fima_ >>:
Как отследить, что сработал отложенный ордер(например, по buy) ?Лучше искать его по id в истории или есть короче вариант?

Можно попробовать так

OrderSelect(1, SELECT_BY_POS)

if(OrderOpenTime()!=0) 

{

///необходимая операция

}

Но это вариант только если у вас всего 1 ордер!

 
Какой функцией определить стоимость одного пункта некоторого финансового инструмента? Например, для EURUSD стоимость 0,0001 - это 10$ (при торговле 1 лотом)
Причина обращения: