error 4107 - страница 2

 

ИСПРАВЬТЕ ДОБАВЬТЕ ПОЖАЛУЙСТА А ТО  Я ТОРМОЗ

Алгоритм простой- получили сигнал на покупку(продажу) выставляем ордер на покупку и один отложенный на продажу ниже на 250 пунктов.
если ордер закрылся(профит) то отложенный ордер тоже закрывается. Если закрылся с минусом отложенный все равно снимается. если сработал отложенный ничего не делается пока он не выйдет по профит или стоп.

КОД

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

extern int TakeProfit = 1000; // Уровень тейкпрофит в пунктах
extern int StopLoss = 250; // уровень стоплосс в пунктах
extern double k = 0.0;
extern int ma_period = 8;

extern double lot = 0.1;
int magic=1234;
int ticket;
bool cantrade=true;
double price;
//bool plan=true;
double MarginStart =0;
double MarginPost =0;

extern int d = 13;
extern int d1 = 34;
extern int d2 = 101;
extern int d3 = 13;
double sl;
double tp;


int OpenLong(double volume=0.1)
{
  int slippage=21;
  string comment="20/200 expert (Long)";
  color arrow_color=Red;
 
 
  ticket=OrderSend(Symbol(),OP_BUY,volume,Ask,slippage,Ask-StopLoss*Point,
  Ask+TakeProfit*Point,comment,magic,0,arrow_color);
  
  //OrderSend(Symbol(), OP_BUY, lot, Ask, 3, sl, tp, "", 0, 0, Blue);
  //OrderSend(Symbol(), OP_BUY, 0.3, Ask, 3,Ask-100*Point, Ask+30*Point, "", 0, 0, Blue);
  //Выставляем ордер ниже на 250 пунктов в обратную сторону
  OrderSend(Symbol(), OP_SELLSTOP, 1,NormalizeDouble((Bid-250*Point),Digits), 3, NormalizeDouble(((Bid-250*Point)+100*Point),Digits),NormalizeDouble(((Bid-250*Point)-30*Point),Digits), "", 0, 0, Red); 
 // OrderSend(Symbol(),OP_SELLLIMIT,Lot,Bid-250*Point,3,Ask-250*Point+100*Point,Ask-250*Point-30*Point,0,Red);

  if(ticket>0)
  {
  if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
  {
  Print("Buy order opened : ",OrderOpenPrice());
   
  return(0);
  }  
  }
  else 
  {
  Print("Error opening Buy order : ",GetLastError()); 
  return(-1);
  }
}
  
int OpenShort(double volume=0.1)
{
  int slippage=10;
  string comment="200 expert (Short)";
  color arrow_color=Red;
  
  ticket=OrderSend(Symbol(),OP_SELL,volume,Bid,slippage,Bid+StopLoss*Point,
  Bid-TakeProfit*Point,comment,magic,0,arrow_color);
   
  //OrderSend(Symbol(), OP_SELL, lot, Bid, 3, sl, tp, "", 0, 0, Red);
  //OrderSend(Symbol(), OP_SELL, 0.3, Bid, 3, Bid+100*Point,Bid-30*Point, "", 0, 0, Red); 
  OrderSend(Symbol(),OP_BUYSTOP,1,NormalizeDouble((Ask+250*Point),Digits),3,NormalizeDouble(((Ask+250*Point)-250*Point),Digits),NormalizeDouble(((Ask+250*Point)+30*Point),Digits), "", 0, 0, Blue);  
  if(ticket>0)
  {
  if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
  {
  Print("Sell order opened : ",OrderOpenPrice());
  return(0);
  }  
  }
  else 
  {
  Print("Error opening Sell order : ",GetLastError()); 
  return(-1);
  }
}
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
  {
 
  return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
  return(0);
  }
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
  {
//----
  // double mah = iMA(Symbol(), PERIOD_H4, ma_period, 0, MODE_LWMA, PRICE_HIGH, 1);
  double ma = iMA(Symbol(), PERIOD_D1, ma_period, 0, MODE_LWMA, PRICE_LOW, 1);
  double randomValue=iCustom(NULL,0,"bz",0,d);
  double randomValue1=iCustom(NULL,0,"bq",0,d1);
  double randomValue2=iCustom(NULL,0,"bq",0,d2);
  double randomValue3=iCustom(NULL,0,"bq",0,d3);
  MarginStart=AccountBalance();
 
// {
  Comment("TRUE!!");
  if(OrdersTotal()== 0) cantrade=true;
   
   
  if((randomValue>k && randomValue1>k)&&( Close[1] < ma && Low [0] < ma ))
  { 
  Comment("Coef ",randomValue, randomValue1," UP!!!");
   
  if(OrdersTotal()<1)
  {
  if(AccountFreeMarginCheck(Symbol(),OP_SELL,lot)<=0 || GetLastError()==134)
  {
  Print("Not enough money");
  return(0);

  }
  if (cantrade==true) 
  {
  MarginStart=AccountBalance();  
  OpenLong(lot);
  cantrade=false; //запрещаем торговать повторно до следующего бара
  return(0);
  }
  }
  else
  Comment("Coef ",randomValue2, randomValue," !!!");
  if((randomValue2<k && randomValue>k) ||(randomValue3>k && randomValue>k))  
  {
  while (OrdersTotal()>0)
  {
  if (OrderType()==OP_BUY) break;
  // выделим первую позицию или ордер в списке
  if (!OrderSelect(0, SELECT_BY_POS)) break; 
  //если закрывается ордер селл то закрывается и отложенный ордер бай 
  // А ЭТО НЕ РАБОТАЕТ
  if ((OrderType()==OP_SELL)&& (OrderType()==OP_BUYLIMIT))
   
  price = MarketInfo(OrderSymbol(), MODE_ASK);
  else
  price = MarketInfo(OrderSymbol(), MODE_BID);

   
  if (!OrderClose(OrderTicket(), OrderLots(), price, 3))
  {
  Print("Ошибка ", GetLastError()," при закрытии позиции ", OrderTicket());
  Sleep(10000);
  RefreshRates(); 
  break; 
  }
   
   
  else Sleep(1000);
  MarginPost=AccountBalance();
  if (MarginPost<MarginStart)
  {
  lot=0.1;
  }
  else 
  if (lot > 0.3)
  {
  lot=0.3;
  }
  else
  lot=lot+0.1;
   
  cantrade=true;
   
  } 
  }  
  }  
   
  if((randomValue<k&& randomValue1<k)&&( Close[1] > ma && High[0] > ma ))
  {  
   
  if(OrdersTotal()<1)
  {
  if(AccountFreeMarginCheck(Symbol(),OP_SELL,lot)<=0 || GetLastError()==134)
  {
  Print("Not enough money");
  return(0);
  }
  if (cantrade==true) 
  { 
  MarginStart=AccountBalance();  
  OpenShort(lot);
  cantrade=false; //запрещаем торговать повторно до следующего бара
  return(0);
  }
  }
   
  else
   
  if((randomValue2>k && randomValue<k)||(randomValue3 > k && randomValue>k))
  {
  while (OrdersTotal()>0)
  {
  if (OrderType()==OP_SELL) break;  
  // выделим первую позицию или ордер в списке
  if (!OrderSelect(0, SELECT_BY_POS)) break; 
  //если закрывается ордер бай то закрывается и отложенный ордер селл 
  // А ЭТО НЕ РАБОТАЕТ
   
  if ((OrderType()==OP_BUY)&&(OrderType()==OP_SELLLIMIT)) 
  price = MarketInfo(OrderSymbol(), MODE_BID);
  else
  price = MarketInfo(OrderSymbol(), MODE_ASK);

   
  if (!OrderClose(OrderTicket(), OrderLots(), price, 3))
  {
  Print("Ошибка ", GetLastError()," при закрытии позиции ", OrderTicket());
  Sleep(10000);
  RefreshRates();
  break;
   
  }
   
   
   
  else Sleep(1000);
  MarginPost=AccountBalance();
  if (MarginPost<MarginStart)
  {
  lot=0.1;
  }
  else 
  if (lot > 0.3)
  {
  lot=0.3;
  }
  else
   
  lot=lot+0.1; 
  cantrade=true;  
  } 
  }  
  }  
  //ExtMapBuffer2[i]=0.0;  
  
   
  
//----
  return(0);
  }




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