//+------------------------------------------------------------------+ //| avalanche 7.mq4 | //| George Tischenko | //| | //+------------------------------------------------------------------+ #property copyright "George Tischenko" extern bool Monitor=true; //в тестере при выключенной визуализации отключать (тормозит) extern int Distance=25, //расстояние в пунктах от цены до первого открытия позиции MinProfit=5, //минимальный профит в пунктах, если открытых ордеров более 1 Slippage=3; extern double Lot=0.1; int Trade=0; double BLot,StartPrice; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- StartPrice=Bid; BLot=MarketInfo(Symbol(),15); // MODE_LOTSIZE размер контракта в базовой валюте инструмента //---- if(Monitor==true) { int a,y; for(a=0,y=5;a<=3;a++) { string N=DoubleToStr(a,0); ObjectCreate(N,OBJ_LABEL,0,0,0,0,0); ObjectSet(N,OBJPROP_CORNER,3); ObjectSet(N,OBJPROP_XDISTANCE,5); ObjectSet(N,OBJPROP_YDISTANCE,y); y+=20; } } //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- if(Monitor==true) { for(int a=0;a<=3;a++) { string N=DoubleToStr(a,0); ObjectDelete(N); } } //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { int i; //---- if(OrdersTotal()==0) { RefreshRates(); if((Ask-StartPrice>=Distance*Point && Trade==0) || Trade==1) { OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,0,0,"",1307,0,Blue); } if((StartPrice-Bid>=Distance*Point && Trade==0) || Trade==-1) { OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,0,0,"",1307,0,Red); } } else //OrdersTotal()>0 {//узнаем размер максимального лота, тип и цену открытия последнего активного ордера double lots=0, Type=-1, OpenPrice=0; for(i=0;i=BLot*Lot*Point*Distance) { switch(Type) { case 0 : Trade=1; break; case 1 : Trade=-1; } C=1; } } else //OrdersTotal()>1 {//лишь бы без убытка... if(AccountProfit()>=BLot*Lot*Point*MinProfit) { switch(Type) { case 0 : Trade=1; break; case 1 : Trade=-1; } C=1; } } switch(C) { case 0 : //закрываться рановато... { lots*=2; //опять Мартин :-( RefreshRates(); switch(Type) { case 0 : { if(OpenPrice-Bid>=Point*Distance*2) {if(OrderSend(Symbol(),OP_SELL,lots,Bid,Slippage,0,0,"",1307,0,Red)>0) return(0);} break; } case 1 : { if(Ask-OpenPrice>=Point*Distance*2) {if(OrderSend(Symbol(),OP_BUY,lots,Ask,Slippage,0,0,"",1307,0,Blue)>0) return(0);} } } break; } case 1 : //закрываем все позиции { while(OrdersTotal()>0) { int ticket_buy=0, //тикет ордера BUY (не может быть=0) ticket_sell=0; //тикет ордера SELL (не может быть=0) for(i=0;i0 && ticket_sell>0; if(OCB) OrderCloseBy(ticket_buy,ticket_sell,White); // Цикл закрытия else {//закрываем оставшиеся одиночные ордера for(i=0;i