Учусь писать советника... - страница 4

 

Если советник мультивалютный, То нужно.

Тем более,что и значения Bid и Point у вас уже, наверное, заданы(заявлены) через MarketInfo().

Я когда то заводил ветку по мультивалютному эксперту. Гляньте и некоторые вопросы будут проясняться....

'Вопрос по мультивалютному советнику'

 

А вот тут конкретно по модификации

'Вопрос по мультивалютному советнику'

 

Сделал такой вариант.. Сразу после открытия вызываю функцию ModifyPos()

OrderSend (...);

ModifyPos();



void ModifyPos()
  {
   if (OrderSelect(0,SELECT_BY_POS)==true) // Если есть открытый ордер
    { 
     if (OrderType()==OP_BUY)
     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Stop*Point,Bid-TakeProfit*Point,0,Red);
     if (OrderType()==OP_SELL)
     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Stop*Point,Ask+TakeProfit*Point,0,Red);
    }  
  }

Stop - 20

TakeProfit - 100

В журнале ошибка - OrderModify error 130

 

Попробуйте для тейков позиции бай сделать

Ask+TakeProfit*Point

Вы сами прикиньте! Почему это у вас вдруг для позиции бай тейкпрофит оказался ниже текущей цены?

Неудивительно, что генерируется ошибка

И для позиции селл тож самое...

НО если вам не нужно изменять тейкпрофит, то лучше сделать так:

OrderModify(OrderTicket(), OrderOpenPrice(), Bid-Stop*Point,
                                                     OrderTakeProfit(), 0, Blue);
Аналогично, для селл
 
rid >>:

Вы сами прикиньте! Почему это у вас вдруг для позиции бай тейкпрофит оказался ниже иекущнй цены?

Неудивительно, что генерируется ошибка

Rid огромное спасибо!

не внимательность моя)... получилось и даже заработало)

void ModifyPos()
   {
        if (OrderSelect(0,SELECT_BY_POS)==true) // Если есть открытый ордер
            { 
               if (OrderType()==OP_BUY)
                   OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Stop*Point,OrderTakeProfit(),0,Red);
               if (OrderType()==OP_SELL)
                   OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Stop*Point,OrderTakeProfit(),0,Red);
            }      
   }
 

Последняя ошибка которая сейчас в журнале при тестировании - OrderSend error 138

Идет без перерыва, когда нет сделок, т.е. на каждый тик эта ошибка.

Как только срабатывает ордер, ошибка исчезает.. ордер закрывается и ошибка снова идет..

Похоже в холостую без сигналов пытается послать ордер.. Но не пойму почему, т.к. условие (if) есть для продажи и для покупки

 
ALex2008 писал(а) >>

Последняя ошибка которая сейчас в журнале при тестировании - OrderSend error 138

Идет без перерыва, когда нет сделок, т.е. на каждый тик эта ошибка.

Как только срабатывает ордер, ошибка исчезает.. ордер закрывается и ошибка снова идет..

Похоже в холостую без сигналов пытается послать ордер.. Но не пойму почему, т.к. условие (if) есть для продажи и для покупки

ну не читали вы прочтите внимательно https://book.mql4.com/ru/content там все есть

 

Прочитать и понять это разные вещи... Я хочу понять на практике)

Есть условие для входа,  после выполнения этих условий и передается управление функции в которой происходит открытие ордера..

Вот и не могу понять как минуя условия пытается сработать OrderSend.. и что логично выдает ошибку.. т.к. нет условийвхода

 
bool RefreshRates( )

Обновление данных в предопределенных переменных и массивах-таймсериях. Эта функция используется, когда эксперт или скрипт производит вычисления в течение долгого времени и нуждается в обновленных данных. Возвращается TRUE, если данные обновлены, иначе FALSE. Данные могут не обновиться только по той причине, что они соответствуют текущему состоянию клиентского терминала. Эксперты и скрипты работают с собственной копией исторических данных. Копия данных по текущему инструменту создается при первоначальном запуске эксперта или скрипта. При каждом следующем запуске эксперта (напомним, что скрипт выполняется однократно и не зависит от приходящих тиков) первоначально созданная копия обновляется. За то время, пока эксперт или скрипт работает, может прийти один или несколько новых тиков, поэтому данные могут устареть.

//------------------------------------------------------------------------------

Попробуйте вставить эту функцию Перед выполнением ф-и OrderSend

См. :

Открытие и установка ордеров 2008-05-05 14:26:13

"Для того чтобы программа работала устойчиво, с минимальным количеством отклонённых торговых приказов, перед исполнением функции OrderSend() необходимо обновлять используемые программой параметры информационного окружения с помощью функций MarketInfo() и RefreshRates()."

 
   RefreshRates();
   OrderSend(Symbol(), OP_SELL, Lot, Price, Slippage, 0, Profit, Comment, MAGIC,0, colorsell);

не помогает...

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