0
Да не надо ее переписывать. Там все нормально по моему

О благодарствую, заработало! Все перепробовали! :) 


//+------------------------------------------------------------------+
//|                                                     PutStops.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

extern int    StopLoss=300; //Стоплосс ордера

double price=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double FindLastBuyPrice()
  {
   int oticket,ticketNumber=0;
   double oprice=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderType()==OP_BUY)
           {
            oticket=OrderTicket();
            if(oticket>ticketNumber)
              {
               ticketNumber=oticket;
               oprice=OrderOpenPrice();
              }
           }
        }
     }
   return(oprice);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ModeStop()
  {
   bool m;
   double StopBuy=NormalizeDouble(FindLastBuyPrice()-StopLoss*Point,Digits);
   double StopSell=NormalizeDouble(FindLastSellPrice()+StopLoss*Point,Digits);
   
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUY)
              {
               if(OrderStopLoss()==0) m=OrderModify(OrderTicket(),OrderOpenPrice(),StopBuy,OrderTakeProfit(),0,Yellow);
              }

            if(OrderType()==OP_SELL)
              {
               if(OrderStopLoss()==0) m=OrderModify(OrderTicket(),OrderOpenPrice(),StopSell,OrderTakeProfit(),0,Yellow);
              }
           }
        }
     }
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double FindLastSellPrice()
  {
   int oticket,ticketNumber=0;
   double oprice=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderType()==OP_SELL)
           {
            oticket=OrderTicket();
            if(oticket>ticketNumber)
              {
               ticketNumber=oticket;
               oprice=OrderOpenPrice();
              }
           }
        }
     }
   return(oprice);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(IsTesting())
     {
      if(OrdersTotal()<1)
        {
         for(int i=1;i<=10;i++)
           {
            int r=OrderSend(Symbol(),OP_BUYLIMIT,0.1,Ask-i*100*Point,0,0,0,"",0,0,Blue);
           }
        }
     }

   if(CountTrades()>=10) ModeStop();

   Comment("\n Last Buy Price: ",FindLastBuyPrice(),
           "\n Count Trades: ",CountTrades());
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 17 декабря 2015, 18:58
0
Буду переписывать FindLastBuyPrice().
avatar

AM2

  • 17 декабря 2015, 18:32
0
Поиск сузился до выражения FindLastBuyPrice(). Если вместо вставить значение 1.08223 все работает.
avatar

AM2

  • 17 декабря 2015, 18:30
0
Попробовал еще такую конструкцию, тоже самое:


   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol())
        {
         if(OrderType()==OP_BUY)
           {
            if(OrderStopLoss()==0) m=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(FindLastBuyPrice()-StopLoss*Point,Digits),OrderTakeProfit(),0,Yellow);
            string oop="oop: "+DoubleToString(OrderOpenPrice())+"  ";
            string sl="sl: "+DoubleToString(NormalizeDouble(FindLastBuyPrice()-StopLoss*Point,Digits))+"  ";
            string tp="tp: "+DoubleToString(OrderTakeProfit());
            Print(StringConcatenate(oop,sl,tp));
           }

         if(OrderType()==OP_SELL)
           {
            if(OrderStopLoss()==0) m=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(FindLastSellPrice()+StopLoss*Point,Digits),OrderTakeProfit(),0,Yellow);
           }
        }
     }
   return;
  }
avatar

AM2

  • 17 декабря 2015, 18:20
0
Читаем:
ERR_NO_RESULT — OrderModify пытается изменить уже
установленные значения такими же значениями. Необходимо изменить одно или
несколько значений и повторить попытку.


Перед модификацией стоит условие:
if(OrderStopLoss()==0)

Зачем же он опять лезет его модифицировать?
avatar

AM2

  • 17 декабря 2015, 18:10
0
Он модифицировал один ордер и продолжает его долбить, хотя в условии:
if(OrderStopLoss()==0)


avatar

AM2

  • 17 декабря 2015, 17:55
0
У тебя компилятор пропускает такое

Пропускает, можно разделить условия.
avatar

AM2

  • 17 декабря 2015, 17:16
0
Где то в этом выражении ошибка:

FindLastBuyPrice()-Delta*Point


Так работает:

m=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-StopLoss*Point,Digits),OrderTakeProfit(),0,Yellow);
              }
avatar

AM2

  • 17 декабря 2015, 16:31
0
У меня сначала не работала эта функция, взял готовое, особо пока не заморачиваюсь над этим.
avatar

AM2

  • 17 декабря 2015, 16:18
0
Написал, занимаюсь отладкой, сыпет ошибку модификации, модифицирует один ордер затем ошибка.



Функция которая выдает ошибку:


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ModeStop()
  {
   bool m;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {            
            if(OrderType()==OP_BUY)
              {
               if(OrderStopLoss()==0) m=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(FindLastBuyPrice()-Delta*Point,Digits),OrderTakeProfit(),0,Yellow);
              }

            if(OrderType()==OP_SELL)
              {
               if(OrderStopLoss()==0) m=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(FindLastSellPrice()+Delta*Point,Digits),OrderTakeProfit(),0,Yellow);
              }
           }
        }
     }
   return;
  }


Код полностью:


//+------------------------------------------------------------------+
//|                                                     PutStops.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

extern int    StopLoss    = 900; //Стоплосс ордера
extern int    Delta       = 200; //Расстояние от крайнего ордера

double price=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double FindLastBuyPrice()
  {
   int oticket,ticketNumber=0;
   double oprice=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderType()==OP_BUY)
           {
            oticket=OrderTicket();
            if(oticket>ticketNumber)
              {
               ticketNumber=oticket;
               oprice=OrderOpenPrice();
              }
           }
        }
     }
   return(oprice);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ModeStop()
  {
   bool m;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {            
            if(OrderType()==OP_BUY)
              {
               if(OrderStopLoss()==0) m=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(FindLastBuyPrice()-Delta*Point,Digits),OrderTakeProfit(),0,Yellow);
              }

            if(OrderType()==OP_SELL)
              {
               if(OrderStopLoss()==0) m=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(FindLastSellPrice()+Delta*Point,Digits),OrderTakeProfit(),0,Yellow);
              }
           }
        }
     }
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double FindLastSellPrice()
  {
   int oticket,ticketNumber=0;
   double oprice=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderType()==OP_SELL)
           {
            oticket=OrderTicket();
            if(oticket>ticketNumber)
              {
               ticketNumber=oticket;
               oprice=OrderOpenPrice();
              }
           }
        }
     }
   return(oprice);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(IsTesting())
     {
      if(OrdersTotal()<1)
        {
         for(int i=1;i<=10;i++)
           {
            int r=OrderSend(Symbol(),OP_BUYLIMIT,0.1,Ask-i*100*Point,0,0,0,"",0,0,Blue);
           }
        }
     }

   if(CountTrades()>=10) ModeStop();

   Comment("\n Last Buy Price: ",FindLastBuyPrice(),
           "\n Count Trades: ",CountTrades());
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 17 декабря 2015, 15:55
0
Вот сделал набросок:




//+------------------------------------------------------------------+
//|                                                    ShowMoney.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict
#property indicator_chart_window

int Shift = 100; // сдвиг текста
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double OrdersProfit()
  {
   double pr=0;

   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderType()==OP_BUY)
           {
            pr+=OrderProfit()+OrderCommission()+OrderSwap();
           }
         if(OrderType()==OP_SELL)
           {
            pr+=OrderProfit()+OrderCommission()+OrderSwap();
           }
        }
     }
   return (pr);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double PointProfit()
  {
   double pr=0;

   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderType()==OP_BUY)
           {
            pr+=(OrderProfit()/OrderLots()/MarketInfo(OrderSymbol(),MODE_TICKVALUE));
           }
         if(OrderType()==OP_SELL)
           {
            pr+=(OrderProfit()/OrderLots()/MarketInfo(OrderSymbol(),MODE_TICKVALUE));
           }
        }
     }
   return (pr);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double OpenPrice()
  {
   double pr=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL) pr=OrderOpenPrice();
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutText(const string text,double price,datetime time)
  {
   ObjectsDeleteAll(0,OBJ_TEXT);
   const string name="OrderInfo"+TimeToString(TimeCurrent());
//--- создадим объект "Текст"  
   ObjectCreate(0,name,OBJ_TEXT,0,time,price);
//--- установим текст
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,10);
//--- установим способ привязки
   ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR_LEFT_LOWER);
//--- установим цвет
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---

   if(OpenPrice()>0) PutText(DoubleToString(PointProfit(),2)+"пп"+" || "+DoubleToString(OrdersProfit(),2)+"USD",OpenPrice(),Time[Shift]);
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 17 декабря 2015, 13:52
0
Опишите подробно как в ТЗ что показывает индикатор, я попробую переписать с нуля. Это будет проще и быстрее чем разбираться с чужим кодом.
avatar

AM2

  • 17 декабря 2015, 13:07
0
У меня на альпах не работает ни одна версия. Он хоть что показывать должен, можно скрин в рабочем состоянии?
avatar

AM2

  • 17 декабря 2015, 12:48
0
Сейчас посмотрю что можно сделать.
avatar

AM2

  • 17 декабря 2015, 12:31
0
Файл *.ex4 внутрь не залезешь.
avatar

AM2

  • 17 декабря 2015, 12:28
+1
Как говорил один новый русский стюардессе на подлёте к Баден-бадену: «Ты что нас за лохов держишь, два раза повторяешь?» :D 
avatar

AM2

  • 17 декабря 2015, 12:26
0
поправте индикатор show money

Где он? *???* 
avatar

AM2

  • 17 декабря 2015, 11:57
0
не сработали вообще ордера выставленные по времени. как то он то работает, то не работает. проверьте пожалуйста его. хотя на тестере работает, а на демо нет

Все работает. Присылайте скрины с настройками, вкладки эксперты, журнал. Если хотите только одну позу ставьте в свойствах советника только лонг или шорт.



avatar

AM2

  • 17 декабря 2015, 11:45
+1
Тебе 40? Думала около 20. Ты ж студентом недавно был.

Я свой строительный в 2009-м закончил. А с ноября по март на сметчика учился от центра занятости.
avatar

AM2

  • 16 декабря 2015, 19:51
0
Если я правильно помню — Лена

Если 75-го года рождения мы ровесники

С тралом: www.opentraders.ru/downloads/978/
avatar

AM2

  • 16 декабря 2015, 17:16