Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 415

 
Link_x:
Здравствуйте!
А в функциях "Kim" есть такая функция, которая рассчитывает количество прибыли от последнего открытого ордера?

Я не нашел, вот сейчас "ломаю голову" над самопальной функцией расчета кол - ва прибыли последнего открытого ордера.


OrderProfit()

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

 
Ekburg:


OrderProfit()

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


Как мне вовремя отвечают, именно в тот момент, когда нахожу решение. :)
Pips_Proffit_Last_Pos = p - PriceOpenLastPos;
Но все равно, спасибо!
 

Ekburg К сожалению времени и возможности написать Вам готовый код нет, так как я на работе нахожусь))

Вы ищите не по истории, а по текущим позициям, вот логическая цепочка, на основе которой попробуйте написать код:

[блок работы с мувингами и выставления ордера]

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

2 мониторим количество ордеров, если ордеров нет на рынке (это и значит что наш ордер был закрыт) то идём в п.3 или следим за этим конкретным ордером, пока его время закрытия не станет больше нуля, в этом случае исключаем пункт 3 и 4

3 находим наш ордер

4 убеждаемся что он закрыт

5 узнаём каким образом он был закрыт

6 если он был закрыт по стопу, то выставляем другой, отличный от него по направлению, ордер


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


extern double Lots = 0.1;
extern double TakeProfit = 100;
extern double StopLoss = 100;       
extern double TrailingStop = 50;
extern double Margincutoff = 100;   
extern double MagicNumber = 12345;
extern double TradeSizePercent = 5;
extern int Slippage = 10;


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
  
  int Crossed (double line1, double line2)
  {
  static int last_direction=0;
  static int current_direction=0;
  
  if (line1>line2)current_direction=1;// пересечение вверх
  if (line1<line2)current_direction=2;// пересечение вниз
  
  if (current_direction!=last_direction)//изменения произошли
  {
  last_direction=current_direction;
  return(last_direction);
  }
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
    int cnt, ticket, total, totalhistory, memoryticket;
    double shortEMA, longEMA;
    
    if(Bars<100) 
     {
     Print("Bars less than 100");
     return(0);
     }
     shortEMA=iMA(NULL,0,8,0,MODE_EMA,PRICE_CLOSE,0);
     longEMA=iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,0);
     int isCrossed=Crossed(shortEMA, longEMA);
//----
   total=OrdersTotal();
   if(total<1) 
     {
      // нет открытых ордеров
      if(AccountFreeMargin()<(1000*Lots))
        {
         Print("We have no money. Free Margin = ", AccountFreeMargin());
         return(0);  
        }
      // проверяем пересечение МА для открытия позиции на покупку
      if(isCrossed==1)
        {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-StopLoss*Point,Ask+TakeProfit*Point,"МА",12345,0,Green);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
            memoryticket= OrderTicket();// запомнили тикет
            Print("BUY order opened : ",OrderOpenPrice());
           }
         else Print("Error opening BUY order : ",GetLastError()); 
         return(0); 
        }
        //проверяем пересечение МА для открытия позиции на продажу
        if(isCrossed==2)
        {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid+StopLoss*Point,Bid-TakeProfit*Point,"MA",12345,0,Red);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
            memoryticket= OrderTicket();// запомнили тикет
            Print("SELL order opened : ",OrderOpenPrice());
           }
         else Print("Error opening SELL order : ",GetLastError()); 
         return(0); 
        }
         return(0); 
        }  
//----начинаем искать закрытые ордера

         //инициализация параметров
  
  int old_order_type;
 
   
  RefreshRates();
  
  //нет открытых ордеров - ищем в истории закрытых ордеров последний закрытый именно этим советником ордер 
  for ( totalhistory = OrdersHistoryTotal() - 1; totalhistory >= 0; totalhistory-- ) 
  {
     if ( OrderSelect(totalhistory, SELECT_BY_TICKET, MODE_HISTORY) && OrderTicket() == memoryticket && OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() )
     {
         old_order_type = OrderType();
         if ( OrderProfit()<0 ) //последний закрытый советником ордер был убыточным, значит, следующий ордер открываем в направлении, противоположном закрытому с убытком
         {
                break; //прекращаем поиск
         }
     }
  }
  //если раньше покупали, то теперь продаем
  if ( old_order_type == OP_BUY )
  {
  ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid+StopLoss*Point,Bid-TakeProfit*Point,"MA",12345,0,Red);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
            memoryticket= OrderTicket();// запомнили тикет
            Print("SELL order opened : ",OrderOpenPrice());
           }
         else Print("Error opening SELL order : ",GetLastError()); 
         return(0); 
        }
 //если раньше продавали, то теперь покупаем
  if ( old_order_type == OP_SELL )
  {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-StopLoss*Point,Ask+TakeProfit*Point,"МА",12345,0,Green);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
            memoryticket= OrderTicket();// запомнили тикет
            Print("BUY order opened : ",OrderOpenPrice());
           }
         else Print("Error opening BUY order : ",GetLastError()); 
         return(0); 
        }
   return(0);
  }
//+------------------------------------------------------------------+
Вот что у меня получается. Открывает правда 3 лота. Вообщем запарился. Можете подправить код? Что не так?
 
Мне уже надоело задавать такие вопросы (невероятно сильно раздражает нервную систему, пи****, простите (гребанные переменные, которые я не в состоянии найти (в основном раздражает, то, что найти сам не могу))).

Какая переменная отвечает за текущее значение цены?
Документацию переворошил, кроме Bid, Ask, POINT_HIGH, POINT_LOW, ничего нет.
Вообще, существует такая переменная?
 
Link_x:
Мне уже надоело задавать такие вопросы (невероятно сильно раздражает нервную систему, пи****, простите (гребанные переменные, которые я не в состоянии найти (в основном раздражает, то, что найти сам не могу))).

Какая переменная отвечает за текущее значение цены?
Документацию переворошил, кроме Bid, Ask, POINT_HIGH, POINT_LOW, ничего нет.
Вообще, существует такая переменная?
Не обращали внимание как в окне "обзор рынка" меняется цена? Там можно наблюдать Bid и Ask -это текущие цены. По первой производится продажа по второй покупка.
 
Link_x:

Как мне вовремя отвечают, именно в тот момент, когда нахожу решение. :)
Напрашивается решение: "Не спешить задавать вопросы". А, если учесть, что далеко не всегда получаешь грамотные ответы... :)))
 
khorosh:
Не обращали внимание как в окне "обзор рынка" меняется цена? Там можно наблюдать Bid и Ask -это текущие цены. По первой производится продажа по второй покупка.

Точняк!!!
Забыл такую мелочь!!!
 
TarasBY:
Напрашивается решение: "Не спешить задавать вопросы". А, если учесть, что далеко не всегда получаешь грамотные ответы... :)))
Да, да. :)
 
Link_x:
Точняк!!!
Забыл такую мелочь!!!

Правильно отвечаешь, как настоящий студент на экзамене:- нельзя говорить не знаю, - нужно говорить забыл))).
 
Link_x:
Да, да. :)

Может стоит попробовать отвечать на чужие вопросы, а не задавать свои. Пользы значительно больше (До определенного момента), конечно пользы для себя
Причина обращения: