Ответ
 
Опции темы
Старый 14.10.2015, 13:35   #4261 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,529
Репутация: 3649
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,118
Поблагодарили 3,653 раз(а) в 1,472 сообщениях
Поинты: 2007
Сообщение от edvinascavadimasca Посмотреть сообщение
привет
у меня такая проблема\ я написал советника работающий по гистограме индикатора\ как мне написать код чтобы он откпывал одну сделку допустим в бай и после етого не отрывал снова в бай а дождался сигнала села и отрыл бы селл\ а то он после того как закрывает один ордер\тогда и же открывает в том же направление\ мне не надо так
помогите пож

ребят помогите пожалуйста
Ну так покажи что написал. Как можно что-то посоветовать не видя в чём у тебя ошибка.
Можно конечно попытаться потелепатить, но это не всегда получается.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
gush (14.10.2015)
Старый 14.10.2015, 13:36   #4262 (permalink)
Интересующийся
 
Аватар для djasper
 
Регистрация: 26.03.2013
Сообщений: 13
Репутация: 1
djasper
Сказал(а) спасибо: 6
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 16
Помогите исправит фунцию мартина в сове

Скрытый текст

Код:
//------------------------------------------------------------------
#property copyright "www.forex-tsd.com"
//------------------------------------------------------------------
//
//-----------------------условия марина------------------------
extern double LotSize = 1.0;                	// Величина торгуемого лота
extern bool MM = true;                    // использовать ли мартингейл
extern double LotExponent = 7;            // на сколько умножать убыточный лот
extern int LotExponentStart = 1;          // после какой по счёту убыточной сделки включать мартингейл
extern int LotExponentMax = 3;            // сколько раз умножать лот
//-------------------------------------------------------------------
extern int ma1per=5;
extern int ma2per=20;
extern int ma3per=50;
extern int ma4per=50;

extern string Name_Expert       = "Rsi Trader";
extern bool   UseAutoMagic      = true;
extern int    ManualMagic       = 28282828;  
extern double StopLoss         = 100;
extern double TakeProfit       = 100;
extern int    Slippage          = 5;
extern double Lots              = 0.1;
extern double MaximumRisk       = 0;
extern double DecreaseFactor    = 3;
//
bool dummyResult;
string s_symbol;

int    MAGIC;
int digit,STOPLEVEL; 

double point = 1;

//
int init() 
{
  s_symbol = Symbol();
  
  digit = MarketInfo(s_symbol,MODE_DIGITS);
  if (digit==2 || digit==4) point = 1;
  if (digit==3 || digit==5) point = 10;
  if (digit==6)             point = 100;
  
  if (UseAutoMagic) MAGIC = ManualMagic;
              else  MAGIC = ManualMagic;  
              
return(0);
}

//
//

int start()
{
  double ma1 = iMA (NULL,0,ma1per,0,MODE_EMA,PRICE_CLOSE,1);
  double ma2 = iMA (NULL,0,ma2per,0,MODE_EMA,PRICE_CLOSE,1);
  double ma3 = iMA (NULL,0,ma3per,0,MODE_EMA,PRICE_CLOSE,1);
  double ma4 = iMA (NULL,0,ma4per,0,MODE_EMA,PRICE_CLOSE,1);
   //
   if (!ExistPositions())
   {
      
     if(ma1<ma2 && ma2>ma3 && ma3>ma4 )  
     {
       OpenBuy();
       return(0);
     }

     if(ma1>ma2 && ma2<ma3 && ma3<ma4 )
     {
       OpenSell();
       return(0);
     }
      
   }
  
return (0);
}

//
bool ExistPositions() {
	for (int i=0; i<OrdersTotal(); i++) {
		if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
			if (OrderSymbol() == s_symbol && OrderMagicNumber() == MAGIC) {
				return(true);
			}
		} 
   }
return(false);
}

//
void OpenBuy() 
{ 
    
   double lbStop = 0; if (StopLoss>0)   lbStop = NormalizeDouble(Ask-StopLoss  *Point*point,digit);
   double lbTake = 0; if (TakeProfit>0) lbTake = NormalizeDouble(Ask+TakeProfit*Point*point,digit);
  
    dummyResult = OrderSend(s_symbol,OP_BUY,LotsOptimized(StopLoss),NormalizeDouble(Ask,Digits),Slippage,lbStop,lbTake,Name_Expert,MAGIC,0); 
  
    }		       

void OpenSell() 
{ 
   double lsStop = 0; if (StopLoss>0)   lsStop = NormalizeDouble(Bid+StopLoss  *Point*point,digit);
   double lsTake = 0; if (TakeProfit>0) lsTake = NormalizeDouble(Bid-TakeProfit*Point*point,digit);
   
   dummyResult = OrderSend(s_symbol,OP_SELL,LotsOptimized(StopLoss),NormalizeDouble(Bid,Digits),Slippage,lsStop,lsTake,Name_Expert,MAGIC,0); 
   
} 


//
double LotsOptimized(double stopLoss)
{
   double lot_min  = MarketInfo(s_symbol,MODE_MINLOT);
   double lot_max  = MarketInfo(s_symbol,MODE_MAXLOT);
   double lot_step = MarketInfo(s_symbol,MODE_LOTSTEP);
   double contract = MarketInfo(s_symbol,MODE_LOTSIZE);
   double lot      = Lots;
   int    orders   = HistoryTotal();     // history orders total
   int    losses   = 0;                  // number of losses orders without a break
   
   //
   //
   //
   //
   //
   
   if(lot_min < 0.0 || lot_max <= 0.0 || lot_step <= 0.0) 
   {
      Print("CalculateVolume: invalid MarketInfo() results [",lot_min,",",lot_max,",",lot_step,"]");
      return(0);
   }
   if(AccountLeverage()<=0)
   {
      Print("CalculateVolume: invalid AccountLeverage() [",AccountLeverage(),"]");
      return(0);
   }
   
   //
   //
   //
   //
   //
   
   if (MaximumRisk > 0 && stopLoss>0)
   {
      double pipMultiplier=1;
      int tdigit  = MarketInfo(s_symbol,MODE_DIGITS);
         if (tdigit==2 || tdigit==4) pipMultiplier = 1;
         if (tdigit==3 || tdigit==5) pipMultiplier = 10;
         if (tdigit==6)              pipMultiplier = 100;
      double _point = MarketInfo(s_symbol,MODE_POINT);
         lot = AccountFreeMargin()*(MaximumRisk/100.0)/(stopLoss*pipMultiplier*MarketInfo(s_symbol,MODE_TICKVALUE));
   }
   
   //+++++++++++++++++++++++++++++++++мартин надо исправить +++++++++++++++++++++++++++++++++++++++++++
   if (MM)
  {
     lots = LotSize;
     int ct = 0;
     for (int c=1;c<=OrdersTotal();c++)
     {
        OrderSelect(OrdersTotal()-c,SELECT_BY_POS,MODE_TRADES);
        if (OrderMagicNumber() != MAGIC) continue;
        ct+=1; break;
     }

     if (ct == 0)
     {
        int clt = 0;
        for (int co=1;co<=OrdersHistoryTotal();co++)
        {
           OrderSelect(OrdersHistoryTotal()-co,SELECT_BY_POS,MODE_HISTORY);
           if (OrderMagicNumber() != MAGIC) continue;
           if (OrderProfit() < 0) { clt+=1; if (clt < LotExponentStart+LotExponentMax) { lot = OrderLots(); } } else break;
        }

        if (clt >= LotExponentStart && LotExponentMax != 0)
        {
           clt = 0;
           int mult = 0;
           for (int co2=1;co2<=OrdersHistoryTotal();co2++)
           {
              OrderSelect(OrdersHistoryTotal()-co2,SELECT_BY_POS,MODE_HISTORY);
              if (OrderMagicNumber() != MAGIC) continue;
              if (OrderProfit() < 0) { clt+=1; if (clt >= LotExponentStart) { lot*=LotExponent; mult+=1; } }
              if (OrderProfit() >= 0) break;
           }
           if (mult <= LotExponentMax) lots = lot;
        }
     }
  }
  //+++++++++++++++++ конец мартина ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
   
   if(DecreaseFactor>0)
   {
      for(int i=orders-1;i>=0;i--)
      {
        if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; }
        if(OrderSymbol()!= s_symbol || OrderType() > OP_SELL) continue;
      
        //
        //
        //
        //
        //
      
        if(OrderProfit() > 0) break;
        if(OrderProfit() < 0) losses++;
        }
        if(losses>1) lot=NormalizeDouble(lot - lot * losses/DecreaseFactor,2);
   }
   
   //
   //
   //
   //
   //
   
   lot=NormalizeDouble(lot/lot_step,0)*lot_step;
   if(lot<lot_min) lot=lot_min;
   if(lot>lot_max) lot=lot_max;
return(lot);
} 

//*******************************************
[свернуть]
djasper вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 14.10.2015, 14:17   #4263 (permalink)
бродяга
 
Аватар для gush
 
Регистрация: 24.01.2011
Сообщений: 2,520
Репутация: 5506
gush gush gush gush gush gush gush gush gush gush gush
Сказал(а) спасибо: 8,488
Поблагодарили 5,290 раз(а) в 1,871 сообщениях
Поинты: 1124
Сообщение от AlexeyVik Посмотреть сообщение
Ну тогда держи готовый, бродяга. У меня сегодня опять день добрых дел.
если allMagic = true то сов будет работать со всеми магиками
если Magic = 0 и allMagic = false то сов будет работать только с ордерами открытыми вручную и открытыми любым методом с магиком 0.
Спасибо Алексей.. вопросик..
выставляются ордера только один раз?
Проверил так.. открыл ордер бай с тп/сл, он по стопу отработал и сразу появился стоповый как и хотелось.. с теми же параметрами..
Сразу удалил этот стоповый в ручную в ожидании что сов это заметит и снова поставит такой же, а нет.. ничего больше не ставится..
gush вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 14.10.2015, 16:04   #4264 (permalink)
Элитный участник
 
Аватар для RoboMaks
 
Регистрация: 19.08.2012
Адрес: Баку, Азербайджан
Сообщений: 651
Репутация: 1128
RoboMaks RoboMaks RoboMaks RoboMaks RoboMaks RoboMaks RoboMaks RoboMaks RoboMaks
Сказал(а) спасибо: 320
Поблагодарили 1,118 раз(а) в 442 сообщениях
Поинты: 623
Отправить сообщение для RoboMaks с помощью Skype™
Сообщение от AlexeyVik Посмотреть сообщение
Вот именно... Либо подстраиваться каждый раз, либо учитывать возможные изменения и стараться сделать так, чтобы не пришлось править и переписывать код.
Ну - всех возможных изменений в любом случае не учтёшь... На форум MQL заходить страшно... Одни ошибки исправляются - другие создаются.. От билда 600 уже 890... и это ещё не конец а могут и вообще движок МТ4 отключить.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Программирование советников, индикаторов и скриптов для МТ4
контакты для платных работ:
e-mail: maksshukurov@mail.ru
skype: maksshukurov1
RoboMaks вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
gush (14.10.2015)
Старый 14.10.2015, 16:45   #4265 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,529
Репутация: 3649
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,118
Поблагодарили 3,653 раз(а) в 1,472 сообщениях
Поинты: 2007
Сообщение от gush Посмотреть сообщение
Спасибо Алексей.. вопросик..
выставляются ордера только один раз?
Проверил так.. открыл ордер бай с тп/сл, он по стопу отработал и сразу появился стоповый как и хотелось.. с теми же параметрами..
Сразу удалил этот стоповый в ручную в ожидании что сов это заметит и снова поставит такой же, а нет.. ничего больше не ставится..
Это как-же, вашу мать,
извиняюсь понимать
Л. Филатов Про Федота стрельца.

Сообщение от gush Посмотреть сообщение
Закрыли руками открытый - всеравно восстановить!!!
Кроме отложек! Они мешать будут, в смысле, если отложку удалили (несработавшую-любую) их не хотелось бы воскрешать))) Реально???? Будут погрешности???
Или я что-то не так умею читать?
Но учитывайте, что это сырой вариант советника и если ордер будет закрыт ближе стоплевела, то возможна ошибка исполнения. Ошибки никак не обрабатываются.
Ещё ответ на вопрос: Если ордер закрылся, поставился стоповый или лимитный, потом он активировался и тоже был закрыт, то на этом месте вновь будет открыт стоповый или лимитный ордер в зависимости от того как закрылся этот ордер.

Последний раз редактировалось AlexeyVik; 14.10.2015 в 16:58.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
gush (14.10.2015)
Старый 14.10.2015, 16:51   #4266 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,529
Репутация: 3649
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,118
Поблагодарили 3,653 раз(а) в 1,472 сообщениях
Поинты: 2007
Сообщение от RoboMaks Посмотреть сообщение
Ну - всех возможных изменений в любом случае не учтёшь... На форум MQL заходить страшно... Одни ошибки исправляются - другие создаются.. От билда 600 уже 890... и это ещё не конец а могут и вообще движок МТ4 отключить.
Так и я о том-же...
Всех денег не заработаешь и всех женщин не перецелуеш но к этому стремиться надо.
Так-же и в этом случае, всех возможных изменений не учтёшь, но надо стараться их предупреждать.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
gush (14.10.2015), RoboMaks (15.10.2015)
Старый 14.10.2015, 16:54   #4267 (permalink)
бродяга
 
Аватар для gush
 
Регистрация: 24.01.2011
Сообщений: 2,520
Репутация: 5506
gush gush gush gush gush gush gush gush gush gush gush
Сказал(а) спасибо: 8,488
Поблагодарили 5,290 раз(а) в 1,871 сообщениях
Поинты: 1124
Сообщение от AlexeyVik Посмотреть сообщение
Это как-же, вашу мать,
извиняюсь понимать
Л. Филатов Про Федота стрельца.


Или я что-то не так умею читать?
отложки не срабатавшие-удаленные - да

но тут Алексей, такая ситуация, открытый ордер закрылся - получили отложку на его место. Я ее руками удалил, чтобы проверить алгоритм.. но ведь на этом месте был открытый ордер и он у нас есть в истории.. как то так..
gush вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 14.10.2015, 17:04   #4268 (permalink)
бродяга
 
Аватар для gush
 
Регистрация: 24.01.2011
Сообщений: 2,520
Репутация: 5506
gush gush gush gush gush gush gush gush gush gush gush
Сказал(а) спасибо: 8,488
Поблагодарили 5,290 раз(а) в 1,871 сообщениях
Поинты: 1124
Сообщение от AlexeyVik Посмотреть сообщение
Это как-же, вашу мать,
извиняюсь понимать
Л. Филатов Про Федота стрельца.


Или я что-то не так умею читать?
Но учитывайте, что это сырой вариант советника и если ордер будет закрыт ближе стоплевела, то возможна ошибка исполнения. Ошибки никак не обрабатываются.
Ещё ответ на вопрос: Если ордер закрылся, поставился стоповый или лимитный, потом он активировался и тоже был закрыт, то на этом месте вновь будет открыт стоповый или лимитный ордер в зависимости от того как закрылся этот ордер.
нет, цена на одном уровне стояла, стоповый ордер мог бы поставиться...
еще раз огромнейшее спасибо,
Алексей, буду тестировать, еще вопрос, один ордер закрытый по одной цене будет постоянно воскрешаться?
Например цена бай 1.3000 тейк=10п.
цена 1.3010 - ордер закрывается - ставится отложка 1.3000
флет, цена качается 10п. вверх - 10п. вниз...
ордер по одной этой цене постоянно будет возрождаться? Бесконечный цикл?
gush вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 14.10.2015, 17:04   #4269 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,529
Репутация: 3649
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,118
Поблагодарили 3,653 раз(а) в 1,472 сообщениях
Поинты: 2007
Сообщение от gush Посмотреть сообщение
отложки не срабатавшие-удаленные - да

но тут Алексей, такая ситуация, открытый ордер закрылся - получили отложку на его место. Я ее руками удалил, чтобы проверить алгоритм.. но ведь на этом месте был открытый ордер и он у нас есть в истории.. как то так..
А не боишься с таким советником забить МТ ордерами до безумия?
Удалил отложку, значит здесь ордера не должно быть. Иначе алгоритм многократно усложняется и в рамки добрых дел не входит. Ведь надо как-то описать при каких обстоятельствах надо восстанавливать ордер, а в каких не надо.

Сообщение от gush Посмотреть сообщение
нет, цена на одном уровне стояла, лимитка могла бы поставиться...
еще раз огромнейшее спасибо,
Алексей, буду тестировать, еще вопрос, один ордер закрытый по одной цене будет постоянно воскрешаться?
Например цена бай 1.3000 тейк=10п.
цена 1.3010 - ордер закрывается - ставится отложка 1.3000
флет, цена качается 10п. вверх - 10п. вниз...
ордер по одной этой цене постоянно будет возрождаться? Бесконечный цикл?
Да. Пока не удалишь отложку.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
gush (14.10.2015)
Старый 14.10.2015, 17:05   #4270 (permalink)
Интересующийся
 
Аватар для edvinascavadimasca
 
Регистрация: 08.10.2015
Сообщений: 9
Репутация: 1
edvinascavadimasca
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 10

Скрытый текст

extern double Lots = 0.01;
extern int TakeProfit = 15;
extern int StopLoss = 15;
extern int Slippage = 5;
extern int Magic = 1111;
extern string comment = "Nistrean";
extern string Indicator = " Indicator";
extern int period = 25;

double PriceHigh, PriceLow, SL, TP;
int ticket;

//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if(Digits == 3 || Digits ==5)
{
TakeProfit *=10;
StopLoss *=10;
Slippage *=10;
}
return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
int start()
{
PriceHigh = iCustom(Symbol(), 0, "Fisher_Yur4ik", period, 1, 1);
PriceLow = iCustom(Symbol(), 0, "Fisher_Yur4ik", period, 2, 1);

if (PriceHigh > 0 && CountBuy() == 0)
{
SL = NormalizeDouble(Ask - StopLoss * Point, Digits);
TP = NormalizeDouble(Ask + TakeProfit * Point, Digits);
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, comment, Magic, 0);
if(ticket > 0)
{
if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true)
{
OrderModify(ticket, OrderOpenPrice(), SL, TP, 0, Blue);
}

}

if(PriceHigh > 0 && CountSell() > 0)
{
for (int i=OrdersTotal() -1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)== true)
{
if (OrderMagicNumber()== Magic && OrderType()== OP_SELL )
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Black);
}

}
}

return(0);

}


if(PriceLow < 0 && CountSell() == 0)
{
SL = NormalizeDouble(Bid + StopLoss * Point, Digits);
TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, comment, Magic, 0);
if(ticket > 0)
{
if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true)
{
OrderModify(ticket, OrderOpenPrice(), SL, TP, 0, Red);
}
}

}
if(PriceLow < 0 && CountBuy() > 0)
{
for (int i=OrdersTotal() -1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true)
{
if (OrderMagicNumber()== Magic && OrderType()== OP_BUY )
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Black);
}

}
}

return(0);




}



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






int CountSell()
{
int count = 0;
for(int trade = OrdersTotal()-1; trade >=0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if(OrderType() == OP_SELL)
count ++;
}
}
return(count);
}


int CountBuy()
{
int count = 0;
for(int trade = OrdersTotal()-1; trade >=0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if(OrderType() == OP_BUY)
count ++;
}
}



return(count);

}

[свернуть]


вот весь код
edvinascavadimasca вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 14.10.2015, 17:14   #4271 (permalink)
бродяга
 
Аватар для gush
 
Регистрация: 24.01.2011
Сообщений: 2,520
Репутация: 5506
gush gush gush gush gush gush gush gush gush gush gush
Сказал(а) спасибо: 8,488
Поблагодарили 5,290 раз(а) в 1,871 сообщениях
Поинты: 1124
Сообщение от AlexeyVik Посмотреть сообщение
А не боишься с таким советником забить МТ ордерами до безумия?
нет, если ордер еще не закрыт ведь ставиться ничего не будет, а вот если закрылся - ставим..

Кстати Алексей, чисто из любопытства хотел спросить, сегодня весь день у меня крутился алгоритм по воскрешению ордеров..
а вот такое возможно, брать инфу из текстового файла куда просто тупо записывать любым форматом лот/цена/тп/сл построчно и проверять есть ли ордера из этого файла, если какого то нет - ставим... ))) тоже как вариант..

Последний раз редактировалось gush; 14.10.2015 в 17:20.
gush вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 14.10.2015, 17:20   #4272 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,529
Репутация: 3649
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,118
Поблагодарили 3,653 раз(а) в 1,472 сообщениях
Поинты: 2007
Сообщение от edvinascavadimasca Посмотреть сообщение

вот весь код
1. Можно завести булеву переменную, проверять её значение и переключать при открытии ордера.
2. Судя по коду, важным является пересечение нулевого уровня индикатора. Так вот и прочти значение не только на первом баре, но и на втором. Тогда будет условие (на первом баре < 0 && на втором баре > 0)
Для меня второй вариант предпочтительней. (не спрашивай почему).
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
gush (14.10.2015)
Старый 14.10.2015, 17:24   #4273 (permalink)
Интересующийся
 
Аватар для edvinascavadimasca
 
Регистрация: 08.10.2015
Сообщений: 9
Репутация: 1
edvinascavadimasca
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 10
а как написать ето условие (на первом баре < 0 && на втором баре > 0) ?? имено код
спасибо заранее
edvinascavadimasca вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 14.10.2015, 17:27   #4274 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,529
Репутация: 3649
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,118
Поблагодарили 3,653 раз(а) в 1,472 сообщениях
Поинты: 2007
Сообщение от gush Посмотреть сообщение
нет, если ордер еще не закрыт ведь ставиться ничего не будет, а вот если закрылся - ставим..

Кстати Алексей, чисто из любопытства хотел спросить, сегодня весь день у меня крутился алгоритм по воскрешению ордеров..
а вот такое возможно, брать инфу из текстового файла куда просто тупо записывать любым форматом лот/цена/тп/сл построчно и проверять есть ли ордера из этого файла, если какого то нет - ставим... ))) тоже как вариант..
В принципе приемлемый вариант, но с определёнными заморочками. Не исключён вариант ошибки при записи и соответственно ошибки исполнения. Я думаю проще поставить отложку куда душа пожелает и пусть сов восстанавливает её, после активации и закрытия, пока цена болтается в этом диапазоне. Ну а если нужно разделить по магику, то открыть можно скриптом с магиком. В сети таких скриптов навалом.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
gush (14.10.2015)
Старый 14.10.2015, 17:31   #4275 (permalink)
бродяга
 
Аватар для gush
 
Регистрация: 24.01.2011
Сообщений: 2,520
Репутация: 5506
gush gush gush gush gush gush gush gush gush gush gush
Сказал(а) спасибо: 8,488
Поблагодарили 5,290 раз(а) в 1,871 сообщениях
Поинты: 1124
Сообщение от AlexeyVik Посмотреть сообщение
В принципе приемлемый вариант, но с определёнными заморочками. Не исключён вариант ошибки при записи и соответственно ошибки исполнения. Я думаю проще поставить отложку куда душа пожелает и пусть сов восстанавливает её, после активации и закрытия, пока цена болтается в этом диапазоне. Ну а если нужно разделить по магику, то открыть можно скриптом с магиком. В сети таких скриптов навалом.
в смысле записывать в текстовый файл руками какие нужны ордера, а не совой..
с утреца один раз записать нужную сеточку... ииии.. пусть весь день стоит на смерть
gush вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 14.10.2015, 17:32   #4276 (permalink)
Интересующийся
 
Аватар для edvinascavadimasca
 
Регистрация: 08.10.2015
Сообщений: 9
Репутация: 1
edvinascavadimasca
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 10
??
edvinascavadimasca вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 14.10.2015, 17:32   #4277 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,529
Репутация: 3649
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,118
Поблагодарили 3,653 раз(а) в 1,472 сообщениях
Поинты: 2007
Сообщение от edvinascavadimasca Посмотреть сообщение
а как написать ето условие (на первом баре < 0 && на втором баре > 0) ?? имено код
спасибо заранее
Вот кусок твоего кода с исправлением для одного направления.

Код:
PriceHigh = iCustom(Symbol(), 0, "Fisher_Yur4ik", period, 1, 1);
PriceHigh2 = iCustom(Symbol(), 0, "Fisher_Yur4ik", period, 1, 2);

PriceLow = iCustom(Symbol(), 0, "Fisher_Yur4ik", period, 2, 1);
PriceLow2 = iCustom(Symbol(), 0, "Fisher_Yur4ik", period, 2, 2);
    
    if (PriceHigh > 0 && PriceHigh2 < 0 && CountBuy() == 0)
Так-же добавь и в условие для открытия Sell
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 14.10.2015, 17:38   #4278 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,529
Репутация: 3649
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,118
Поблагодарили 3,653 раз(а) в 1,472 сообщениях
Поинты: 2007
Сообщение от gush Посмотреть сообщение
в смысле записывать в текстовый файл руками какие нужны ордера, а не совой..
с утреца один раз записать нужную сеточку... ииии.. пусть весь день стоит на смерть
Так у тебя-же есть скрипт ставить сетку. Поставил сетку и сов весь день и даже не один день восстанавливает её. К вечеру какого либо дня поудалял отложки, дождался закрытия последнего и открытия на его месте отложки, удалил её и занимайся переводом денег. Сов можно не снимать с графика.
На следующий день не снимая советник с чарта скриптом кидаешь сеть и снова ждёшь перечисления очередного миллиона.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
gush (14.10.2015), RoboMaks (15.10.2015)
Старый 14.10.2015, 17:43   #4279 (permalink)
бродяга
 
Аватар для gush
 
Регистрация: 24.01.2011
Сообщений: 2,520
Репутация: 5506
gush gush gush gush gush gush gush gush gush gush gush
Сказал(а) спасибо: 8,488
Поблагодарили 5,290 раз(а) в 1,871 сообщениях
Поинты: 1124
Сообщение от AlexeyVik Посмотреть сообщение
Так у тебя-же есть скрипт ставить сетку. Поставил сетку и сов весь день и даже не один день восстанавливает её. К вечеру какого либо дня поудалял отложки, дождался закрытия последнего и открытия на его месте отложки, удалил её и занимайся переводом денег. Сов можно не снимать с графика.
На следующий день не снимая советник с чарта скриптом кидаешь сеть и снова ждёшь перечисления очередного миллиона.
да да да! Это все есть, просто идея сегодня пришла как еще можно восстанавливать нужные ордера, я на форум не заходил днем, не видел что уже сов есть, спасибо Алексей!!!! Буду пробовать
gush вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
AlexeyVik (14.10.2015)
Старый 14.10.2015, 17:44   #4280 (permalink)
Интересующийся
 
Аватар для edvinascavadimasca
 
Регистрация: 08.10.2015
Сообщений: 9
Репутация: 1
edvinascavadimasca
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 10
я так и поставил
не показывает ошибок но вапще не отрывает ордеров

Скрытый текст

extern double Lots = 0.01;
extern int TakeProfit = 15;
extern int StopLoss = 15;
extern int Slippage = 5;
extern int Magic = 1111;
extern string comment = "Nistrean";
extern string Indicator = " Indicator";
extern int period = 25;

double PriceHigh, PriceLow, PriceHigh2, PriceLow2, SL, TP;
int ticket;

//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if(Digits == 3 || Digits ==5)
{
TakeProfit *=10;
StopLoss *=10;
Slippage *=10;
}
return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
int start()
{
PriceHigh = iCustom(Symbol(), 0, "Fisher_Yur4ik", period, 1, 1);
PriceHigh2 = iCustom(Symbol(), 0, "Fisher_Yur4ik", period, 1, 2);

PriceLow = iCustom(Symbol(), 0, "Fisher_Yur4ik", period, 2, 1);
PriceLow2 = iCustom(Symbol(), 0, "Fisher_Yur4ik", period, 2, 2);

if (PriceHigh > 0 && PriceHigh2 < 0 && CountBuy() == 0)
{
SL = NormalizeDouble(Ask - StopLoss * Point, Digits);
TP = NormalizeDouble(Ask + TakeProfit * Point, Digits);
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, comment, Magic, 0);
if(ticket > 0)
{
if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true)
{
OrderModify(ticket, OrderOpenPrice(), SL, TP, 0, Blue);
}

}

if(PriceHigh > 0 && PriceHigh2 < 0 && CountSell() > 0)
{
for (int i=OrdersTotal() -1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)== true)
{
if (OrderMagicNumber()== Magic && OrderType()== OP_SELL )
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Black);
}

}
}

return(0);

}


if(PriceLow < 0 && PriceLow2 > 0 && CountSell() == 0)
{
SL = NormalizeDouble(Bid + StopLoss * Point, Digits);
TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, comment, Magic, 0);
if(ticket > 0)
{
if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true)
{
OrderModify(ticket, OrderOpenPrice(), SL, TP, 0, Red);
}
}

}
if(PriceLow < 0 && PriceLow2 > 0 && CountBuy() > 0)
{
for (int i=OrdersTotal() -1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true)
{
if (OrderMagicNumber()== Magic && OrderType()== OP_BUY )
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Black);
}

}
}

return(0);




}



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






int CountSell()
{
int count = 0;
for(int trade = OrdersTotal()-1; trade >=0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if(OrderType() == OP_SELL)
count ++;
}
}
return(count);
}


int CountBuy()
{
int count = 0;
for(int trade = OrdersTotal()-1; trade >=0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if(OrderType() == OP_BUY)
count ++;
}
}



return(count);

}
[свернуть]
edvinascavadimasca вне форума   Ответить с цитированиемОтветить с цитированием  
Ответ

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 16:36. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
SEO by vBSEO