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

 

Здравствуйте. Подскажите пожалуйста есть ли такой советник, который бы отмечал на графике точки входа и выхода из рынка, типа того как на тестере стратегий ???

 

А вручную, -  чем не устраивает ? Вытаскивай из Истории счета мышкой сделки на график и они там будут обозначаться!

Или возьми скриптом - http://www.kimiv.ru/index.php?option=com_remository&Itemid=13&func=fileinfo&id=32

 
TheXpert >>:

ShellExecute, команда "open", емнип.


Благодарю
 
rid >>:

Её нужно ставить снаружи. Не внутри какой-ниб . функции, - а как отдельную самостоятельную функцию.

Вот так :


Не уверен, что при таких условиях советник будет работать. Т.к. самая первая позиция не сможет открыться...

Нужно убрать ф-ю Функция isCloseLastPosByTake() или из условия для покупки, или из условий для продажи.

Тогда советник заработает.

привожу код советника с исправлениями по рекомендации rid-а только ф-я старт

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
    // Узнаем уровень стопов и спрэд
    int Spread = MarketInfo(Symbol(), MODE_SPREAD);
    int StopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL);

    // Рассчитываем значения средних на 0-ом и 1-ом барах
    double MAF_0 = iMA(NULL, 0, MAFP, 0, 1, 1, 0);
    double MAF_1 = iMA(NULL, 0, MAFP, 0, 1, 1, 1);
    double MAS_0 = iMA(NULL, 0, MASP, 0, 1, 1, 0);
    double MAS_1 = iMA(NULL, 0, MASP, 0, 1, 1, 1);
    
   // открытие позиции Buy покупка
    if(MAF_1 < MAS_1 && MAF_0 > MAS_0)                         {
    if( isCloseLastPosByTake( NULL, OP_SELL,MagicNumber) ==true) {
     if(CheckOrders(OP_SELL))                                      {
       if(StopLoss <= StopLevel+Spread)
         double SL = 0;        else         SL = Ask - StopLoss*Point;
       if(TakeProfit <= StopLevel-Spread)
         double TP = 0;        else         TP = Ask + TakeProfit*Point;
       if(!OrderSend(Symbol(), OP_BUY, Lots, Ask, 5, SL, TP, NULL, MagicNumber))
         Print("Не открыт ордер Buy. Ошибка №", GetLastError()); 
                }
               }
              }
//-------------------Конец покупки -----------------------
    
  //  ----- Открытие позиции Sell продажа------------  
    if(MAF_1 > MAS_1 && MAF_0 < MAS_0)                         {
    if(CheckOrders(OP_BUY))                                     {
      if(StopLoss <= StopLevel+Spread)
         SL = 0;        else         SL = Bid + StopLoss*Point;
       if(TakeProfit <= StopLevel-Spread)
         TP = 0;        else         TP = Bid - TakeProfit*Point;
       if(!OrderSend(Symbol(), OP_SELL, Lots, Bid, 5, SL, TP, NULL, MagicNumber))
         Print("Не открыт ордер Sell. Ошибка №", GetLastError()); 
                 }
                }
               }
      //---конец блока продажи ------------------------------
     
//----
   return(0);
  }//+----------КОНЕЦ ФУНКЦИИ СТАРТ -------------------+

//ЖЖЖЖЖЖЖ Другие вызываемые пользовательские функции ЖЖЖЖЖЖ
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия           |
//|  последней позиции по тейку.                                    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   ocp, otp;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }} }}}}}

  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    otp=NormalizeDouble(OrderTakeProfit(), dg);
    if (ocp==otp) return(True);
  }
  return(False);
}
 

при компиляции выдал ошибку

2;73;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;103:3;'}' - unbalanced parentheses

это место пометил * помогите люди добрые.....

   return(0);
 * }//+----------КОНЕЦ ФУНКЦИИ СТАРТ -------------------+
 
igrok2008 писал(а) >>

при компиляции выдал ошибку

это место пометил * помогите люди добрые.....

Количество фигурных скобок разное в функции старт

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start() {
    // Узнаем уровень стопов и спрэд
    int Spread = MarketInfo(Symbol(), MODE_SPREAD);
    int StopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL);

    // Рассчитываем значения средних на 0-ом и 1-ом барах
    double MAF_0 = iMA(NULL, 0, MAFP, 0, 1, 1, 0);
    double MAF_1 = iMA(NULL, 0, MAFP, 0, 1, 1, 1);
    double MAS_0 = iMA(NULL, 0, MASP, 0, 1, 1, 0);
    double MAS_1 = iMA(NULL, 0, MASP, 0, 1, 1, 1);
    
   // открытие позиции Buy покупка
    if(MAF_1 < MAS_1 && MAF_0 > MAS_0)                         {
        if( isCloseLastPosByTake( NULL, OP_SELL,MagicNumber) ==true) {
            if(CheckOrders(OP_SELL))                                      {
                if(StopLoss <= StopLevel+Spread)   double SL = 0;        else         SL = Ask - StopLoss*Point;
                if(TakeProfit <= StopLevel-Spread) double TP = 0;        else         TP = Ask + TakeProfit*Point;
                if(!OrderSend(Symbol(), OP_BUY, Lots, Ask, 5, SL, TP, NULL, MagicNumber))
                    Print("Не открыт ордер Buy. Ошибка №", GetLastError()); 
            }
        }
    }
    //-------------------Конец покупки -----------------------
    
    //  ----- Открытие позиции Sell продажа------------  
    if(MAF_1 > MAS_1 && MAF_0 < MAS_0)                         {
        if( isCloseLastPosByTake( NULL, OP_BUY,MagicNumber) ==true) {
            if(CheckOrders(OP_BUY))                                     {
               if(StopLoss <= StopLevel+Spread)             SL = 0;        else         SL = Bid + StopLoss*Point;
               if(TakeProfit <= StopLevel-Spread)           TP = 0;        else         TP = Bid - TakeProfit*Point;
               if(!OrderSend(Symbol(), OP_SELL, Lots, Bid, 5, SL, TP, NULL, MagicNumber))
                   Print("Не открыт ордер Sell. Ошибка №", GetLastError()); 
            }
        }
    }
    //---конец блока продажи ------------------------------
    
    return(0);
}//+----------КОНЕЦ ФУНКЦИИ СТАРТ -------------------+
Что-то примерно так должно было быть. В логику не вникал
 
igrok2008 >>:

привожу код советника с исправлениями по рекомендации rid-а только ф-я старт


Убери лишнюю фигурную скобку из блока Продажи. Я же писал, что кол-во открывающих скобок должно быть равно кол-ву закрывающих. А у тебя там окрыто 2 скобки, а закрыто - три !

И конечно,  будет ошибка компелирования.

 
rid >>:

Убери лишнюю фигурную скобку из блока Продажи. Я же писал, что кол-во открывающих скобок должно быть равно кол-ву закрывающих. А у тебя там окрыто 2 скобки, а закрыто - три !

И конечно, будет ошибка компелирования.

А открывающие скобки - это что????


аааааааааа разобрался это {.........СПАСИБО!!!!!!!!!!!!!! :-)))))))

Буду тестить........Если чо, не обессудить, попытаю вопросами.

 
igrok2008 писал(а) >>

А открывающие скобки - это что????

аааааааааа разобрался это {.........СПАСИБО!!!!!!!!!!!!!! :-)))))))

Буду тестить........Если чо, не обессудить, попытаю вопросами.

Я ж вроде исправленный вариант сделал.

 

Такой исправленный вариант не будет работать. Он не сможет открыть самую первую сделку. Т.к. условием открытия любой самой  первой сделки в твоем варианте явл. закрытие любой предыдущей по тейку или по стопу!

Т.е. - заколдованный круг.

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