Определение точки стопа

 

Доброе время суток.

Подскажите пж может кто то видел функцию или что то подобное есть:

Есть открытый ордер с выставленными SL и TP. Как вернуть цену на котором стоит Stop Loss ордера?

И узнать какой открыт ордер Buy или Sell...

Заранее благодарен за любую инфу

 
double OrderStopLoss( )

Возвращает значение цены закрытия позиции при достижении уровня убыточности (stop loss) для текущего выбранного ордера.
Ордер должен быть предварительно выбран с помощью функции OrderSelect().

int OrderType( )
Возвращает тип операции текущего выбранного ордера. Mожет быть одной из следующих величин:
OP_BUY - позиция на покупку,
OP_SELL - позиция на продажу,
OP_BUYLIMIT - отложенный ордер на покупку по достижении заданного уровня, текущая цена выше уровня,
OP_BUYSTOP - отложенный ордер на покупку по достижении заданного уровня, текущая цена ниже уровня,
OP_SELLLIMIT - отложенный ордер на продажу по достижении заданного уровня, текущая цена ниже уровня,
OP_SELLSTOP - отложенный ордер на продажу по достижении заданного уровня, текущая цена выше уровня.
Ордер должен быть предварительно выбран с помощью функции OrderSelect().

 

Спасибо. А вот так как?

//+------------------------------------------------------------------+
//| NumberOfPositions.mq4 |
//| Copyright © 2008, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
WhatOpen();
//----
return(0);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Версия : 19.02.2008 |
//| Описание : Возвращает количество позиций. |
//+------------------------------------------------------------------+
int NumberOfPositionsBuy(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) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) kp++;
}}}}} return(kp);}
//+------------------------------------------------------------------+

int NumberOfPositionsSell(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_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) kp++;
}}}}} return(kp);}


//+------------------------------------------------------------------+
int WhatOpen() // Функция проверки наличия открытых ордеров.
// Возвращает: Long-1, Short-2, Null-0.
{int WO=0;
if (NumberOfPositionsBuy()==1)
WO=1;
if (NumberOfPositionsSell()==1)
WO=2;

return(WO);
}

//+------------------------------------------------------------------+

 

Фунция WhatOpen(); у тебя типа int, а она у тебя вверху просто написана, ты ее значение присвой какой либо переменной, например int a = WhatOpen(); И зачем она вообще нужна, OrderTotal итак вычисляет количество открытых ордеров. Далее тип string лучше обнуляй не кавычками, а так string sy=NULL. Лучше просто напиши что это все должно делать, тут без ста грамм не разобраться..

 

Да...ничего особенного просто хочу на стоп выставлять отложенный ордер в обратную сторону. Вот и надо определить в какую сторону уже открыто и где у этого открытого стоп стоит :)

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

Проще :( Только я что то не нашел как определить процесс открытия. Как узнать что он вот открылся?

А да...он то изначально отложенник...так что надо определять момент открытия и превращения его в открытый

 
Это определяется примерно вот так
if (OrderSend(Symbol(),Type,volume,Ask,2,stoploss,takeprofit,NULL,0,0,CLR_NONE==-1); {Alert(Ошибка);}

ТОлько я вот в твоем эксперте нигде не нашел функцию, которая открывает ордера..

В общем вопрос такой, кто ставит первый отложенник, ты или эксперт? Если эксперт, то где в нем функция открытия первого отложенного ордера?

 

значит в начале программы надо сделать примерно так

if (TotalOrder()>0)
{
    if (OrderSelect(0,SELECT_BY_POS)==true)
                {  
                 int a=OrderType();
                 int ticket= OrderTicket();
                 double Lots= OrderLots();
                 double SL= OrderStopLoss();
                          switch(a)
                              {
                              case 0 : //открыт ордер BUE дальнейшие расчеты
                              case 1 : // открыт ордер SELL дальнейшие расчеты
                              } } }
 
Интересно...с case никак не касался...Спасибо - попробую что то да родить...потом расскажу что получилось
Причина обращения: