Файл:
Ссылка на изображение:
Выравнивание: нет слева справа
Описание:
35 AM2 Сообщений: 16441 - Андрей
//+------------------------------------------------------------------+ //| Limit.mq4 | //| Copyright 2015, AM2 | //| http://www.forexsystems.biz | //+------------------------------------------------------------------+ #property copyright "Copyright © 2015, AM2" #property link "http://www.forexsystems.biz" #property description "Simple expert advisor" //--- Inputs extern double Lots = 0.1; // лот extern int StopLoss = 500; // лось extern int TakeProfit = 500; // язь extern int TrailingStop = 300; // трал extern int StopLimit = 0; // 0-стоп 1-лимит extern int Delta = 100; // отступ extern int Slip = 30; // реквот extern int StartHour = 9; // час начала торговли extern int StartMin = 30; // минута начала торговли extern int CloseHour = 3; // через сколько часов закрываем ордер extern int Magic = 123; // магик //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- Comment(""); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { Comment(""); } //+------------------------------------------------------------------+ //| Check for open order conditions | //+------------------------------------------------------------------+ void PutOrder(int type,double price) { int r=0; double sl=0,tp=0; if(type==1 || type==3 || type==5) { if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*Point,Digits); if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits); } if(type==0 || type==2 || type==4) { if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*Point,Digits); if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits); } r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,Green); return; //--- } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int CountTrades() { int count=0; for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { if(OrderType()==OP_BUY || OrderType()==OP_SELL) count++; } } } return(count); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int CountOrders(int type) { int count=0; for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { if(OrderType()==type) count++; } } } return(count); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void DelOrder() { bool del; for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { if(OrderType()>1) del=OrderDelete(OrderTicket()); } } } return; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ datetime OpenTime() { datetime t=0; for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { if(OrderType()<2) t=OrderOpenTime(); } } } return(t); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int CloseTime() { int t=0; if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY)==true) t=TimeDay(OrderCloseTime()); return(t); } //+------------------------------------------------------------------+ //| Check for close order conditions | //+------------------------------------------------------------------+ void ClosePos() { bool c; for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderMagicNumber()==Magic || OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) { c=OrderClose(OrderTicket(),OrderLots(),Bid,Slip,White); break; } if(OrderType()==OP_SELL) { c=OrderClose(OrderTicket(),OrderLots(),Ask,Slip,White); break; } } } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void Trailing() { bool mod; for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() || OrderMagicNumber()==Magic) { if(OrderType()==OP_BUY) { if(TrailingStop>0) { if(Bid-OrderOpenPrice()>TrailingStop*Point) { if(OrderStopLoss()<Bid-TrailingStop*Point) { mod=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*Point,OrderTakeProfit(),0,Yellow); return; } } } } if(OrderType()==OP_SELL) { if(TrailingStop>0) { if((OrderOpenPrice()-Ask)>TrailingStop*Point) { if((OrderStopLoss()>(Ask+TrailingStop*Point)) || (OrderStopLoss()==0)) { mod=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*Point,OrderTakeProfit(),0,Yellow); return; } } } } } } } } //+------------------------------------------------------------------+ //| OnTick function | //+------------------------------------------------------------------+ void OnTick() { /* Тип операции текущего выбранного ордера. Mожет быть одной из следующих величин: 0 - OP_BUY - ордер на покупку, 1 - OP_SELL - ордер на продажу, 2 - OP_BUYLIMIT - отложенный ордер на покупку по достижении заданного уровня, текущая цена выше уровня, 3 - OP_SELLLIMIT - отложенный ордер на продажу по достижении заданного уровня, текущая цена ниже уровня, 4 - OP_BUYSTOP - отложенный ордер на покупку по достижении заданного уровня, текущая цена ниже уровня, 5 - OP_SELLSTOP - отложенный ордер на продажу по достижении заданного уровня, текущая цена выше уровня. */ if(Hour()>=StartHour && Minute()>=StartMin) { if(CountTrades()<1 /*&& Day()!=CloseTime()*/) { if(StopLimit==0) { if(CountOrders(5)<1)PutOrder(5,Bid-Delta*Point); if(CountOrders(4)<1)PutOrder(4,Bid+Delta*Point); } if(StopLimit==1) { if(CountOrders(2)<1)PutOrder(2,Bid-Delta*Point); if(CountOrders(3)<1)PutOrder(3,Bid+Delta*Point); } } } if(CountTrades()>0) DelOrder(); if(CountTrades()>0 && TimeCurrent()-OpenTime()>CloseHour*3600) ClosePos(); if(TrailingStop>0) Trailing(); } //+------------------------------------------------------------------+
19 lorik Автор Сообщений: 357 - Лариса
Комментарии (4)
35 AM2 Сообщений: 16441 - Андрей
35 AM2 Сообщений: 16441 - Андрей
19 lorik Автор Сообщений: 357 - Лариса
19 lorik Автор Сообщений: 357 - Лариса
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий