little_whore

Author: Copyright � 2013 by Musa Esmagambetov
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedIt Closes Orders by itself
Indicators Used
Moving average indicator
0 Views
0 Downloads
0 Favorites
little_whore
//+-----------------------------------------------------------------------+
//| "Little Whore"  Copyright © 2013 by Musa Esmagambetov cocaine@nxt.ru  |
//+-----------------------------------------------------------------------+
#property copyright "Copyright © 2013 by Musa Esmagambetov"
#property link      "cocaine@nxt.ru"
#define magic_number  19780402   //ìîé äåíü ðîæäåíèÿ) 
double risk = 0.1;               //íè÷åãî çäåñü íå òðîãàéòå!!!
int deep_bar = 7;                //è çäåñü!!!
int orders_limit = 69;           //è òóò!!!
extern string about_lot = "Åñëè ïîñòàâèòü 0, òî ñîâåòíèê âûñòàâèò ìèíèìàëüíûé ëîò îò äèëåðà";
extern double min_lot = 0.1; //ìèíèìàëüíûé ëîò ïî óìîë÷àíèþ
double ma_period = 195;          
//double mm_start_balance;       //áàëàíñ äåïîçèòà äëÿ ñòàðòà ðàñ÷åòîâ ìàíèìåíåäæåíòà
#define sell_signal        -1    //ñèãíàë íà ïðîäàæó
#define buy_signal          1    //ñèãíàë íà ïîêóïêó
#define no_signal           0    //ñèãíàë âíå ðûíêà
#define close_buy           2    //ñèãíàë íà çàêðûòèå ïîêóïîê
#define close_sell         -2    //ñèãíàë íà çàêðûòèå ïðîäàæ
#define error_signal        3    //ñèãíàë î íàëè÷èè îøèáêè
int buy_count = -1;                          //ñ÷åò÷èê òèêåòîâ ïîêóïîê
int sell_count = -1;                         //ñ÷åò÷èê òèêåòîâ ïðîäàæ
int buy_tickets[100], sell_tickets[100];     //ìàññèâû äëÿ õðàíåíèÿ òèêåòîâ
int       previus_time = 0;
//-----------------------ïåðâè÷íàÿ èíèöèàëèçàöèÿ
void init(){previus_time = Time[0]; if (min_lot == 0) min_lot = MarketInfo(Symbol(), MODE_MINLOT);}
//-----------------------çàïóñê ñîâåòíèêà
int start(){

   if(Bars<100 || IsTradeAllowed()==false || Volume[0]>1 || Time[0] == previus_time) return (0);
   previus_time = Time[0];
      switch(scan_market())
            {
      case sell_signal:
            sell_count = sell_count + 1;
            sell_tickets[sell_count] = sell_routine(); 
            break;
      case buy_signal:
            buy_count = buy_count + 1;
            buy_tickets[buy_count] = buy_routine(); 
            break;
      case close_buy:
            while(buy_count >= 0){close_buy_func(buy_tickets[buy_count]);}
            break;
      case close_sell:
            while(sell_count >=0){close_sell_func(sell_tickets[sell_count]);}
            break;
      case error_signal: 
            //MessageBox(error_func());
            break;
      case no_signal: break;
            }
return (0);}
//-----------------------ïîäñ÷åò ïîçèöèé
int check_positions(int cmd){
 int count=0;
  for(int i=0;i<OrdersTotal();i++){
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)== true && OrderSymbol()==Symbol() && OrderMagicNumber()==magic_number && OrderType() == cmd)
      count++;}
  return(count);
  }
//-----------------------ïîèñê ñèãíàëîâ
int scan_market(){
   if(GetLastError()!=0) return (error_signal);
   double ma=iMA(NULL,0,ma_period,0,MODE_SMMA,PRICE_CLOSE,0);
//-----------------------êðèòåðèè ïîêóïêè
   if((Open[deep_bar]<ma && Close[deep_bar]>ma) && check_positions(OP_BUY) < orders_limit)
   return (buy_signal);
//-----------------------êðèòåðèè ïðîäàæè
   if((Open[deep_bar]>ma && Close[deep_bar]<ma) && check_positions(OP_SELL) < orders_limit) 
   return (sell_signal);
//-----------------------êðèòåðèè çàêðûòèÿ ïîêóïîê
   if((Open[deep_bar]>ma && Close[deep_bar]<ma) && check_positions(OP_BUY) == orders_limit)
   return (close_buy);
//-----------------------êðèòåðèè çàêðûòèÿ ïðîäàæ
   if((Open[deep_bar]<ma && Close[deep_bar]>ma) && check_positions(OP_SELL) == orders_limit)
   return (close_sell);
return (no_signal);}
//-----------------------ïîêóïêà, âîçâðàùàåò òèêåò
int buy_routine(){return (OrderSend(Symbol(),OP_BUY,mm_func(),Ask,3,0,0,"Ïîêóïî÷êà!",magic_number,0,Blue));}
//-----------------------ïðîäàæà, âîçâðàùàåò òèêåò
int sell_routine(){return (OrderSend(Symbol(),OP_SELL,mm_func(),Bid,3,0,0,"Ïðîäàæåíüêà!",magic_number,0,Red));}
//-----------------------çàêðûòèå ïðîäàæ
void close_sell_func(int ticket){
   if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES) && OrderMagicNumber()==magic_number){
         OrderClose(OrderTicket(),OrderLots(),Ask,3,White); sell_count = sell_count - 1;}}
//-----------------------çàêðûòèå ïîêóïîê
void close_buy_func(int ticket){
   if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES) && OrderMagicNumber()==magic_number){
         OrderClose(OrderTicket(),OrderLots(),Bid,3,White); buy_count = buy_count - 1;}}
//-----------------------ðàñ÷åò ëîòà
double mm_func(){             //âîçâðàùàåò ðàçìåð ëîòà
//double lot, size = NormalizeDouble(AccountFreeMargin() * risk /(MarketInfo(Symbol(), MODE_LOTSIZE)/10), 2);
double lot = NormalizeDouble(AccountFreeMargin() * risk / MarketInfo(Symbol(), MODE_LOTSIZE), 2);    
//-----------------------äîñòàòî÷íî ëè äåíåã?
   if( lot < min_lot || (AccountFreeMarginCheck( Symbol(), OP_BUY,  min_lot) < 10. ) || 
   ( AccountFreeMarginCheck( Symbol(), OP_SELL, min_lot) < 10. ) || 
          ( GetLastError() == 134 ) ){
    lot = min_lot;}
return( lot );}
//-----------------------îáðàáîò÷èê îøèáîê   
string error_func(){
switch(GetLastError()) {
            case(0):   return("Íåò îøèáêè");
            case(1):   return("Íåò îøèáêè, íî ðåçóëüòàò íåèçâåñòåí");
            case(2):   return("Îáùàÿ îøèáêà");
            case(3):   return("Íåïðàâèëüíûå ïàðàìåòðû");
            case(4):   return("Òîðãîâûé ñåðâåð çàíÿò");
            case(5):   return("Ñòàðàÿ âåðñèÿ êëèåíòñêîãî òåðìèíàëà");
            case(6):   return("Íåò ñâÿçè ñ òîðãîâûì ñåðâåðîì");
            case(7):   return("Íåäîñòàòî÷íî ïðàâ");
            case(8):   return("Ñëèøêîì ÷àñòûå çàïðîñû");
            case(9):   return("Íåäîïóñòèìàÿ îïåðàöèÿ, íàðóøàþùàÿ ôóíêöèîíèðîâàíèå ñåðâåðà");
            case(64):  return("Ñ÷åò çàáëîêèðîâàí");
            case(65):  return("Íåïðàâèëüíûé íîìåð ñ÷åòà");
            case(128): return("Èñòåê ñðîê îæèäàíèÿ ñîâåðøåíèÿ ñäåëêè");
            case(129): return("Íåïðàâèëüíàÿ öåíà");
            case(130): return("Íåïðàâèëüíûå ñòîïû");
            case(131): return("Íåïðàâèëüíûé îáú¸ì");
            case(132): return("Ðûíîê çàêðûò");
            case(133): return("Òîðãîâëÿ çàïðåùåíà");
            case(134): return("Íåäîñòàòî÷íî äåíåã äëÿ ñîâåðøåíèÿ îïåðàöèè");
            case(135): return("Öåíà èçìåíèëàñü");
            case(136): return("Íåò öåí");
            case(137): return("Áðîêåð çàíÿò");
            case(138): return("Íîâûå öåíû");
            case(139): return("Îðäåð çàáëîêèðîâàí è óæå îáðàáàòûâàåòñÿ");
            case(140): return("Ðàçðåøåíà òîëüêî ïîêóïêà");
            case(141): return("Ñëèøêîì ìíîãî çàïðîñîâ");
            case(145): return("Ìîäèôèêàöèÿ çàïðåùåíà, ò.ê. îðäåð ñëèøêîì áëèçîê ê ðûíêó");
            case(146): return("Ïîäñèñòåìà òîðãîâëè çàíÿòà");
            case(147): return("Èñïîëüçîâàíèå äàòû èñòå÷åíèÿ çàïðåùåíî áðîêåðîì");
            case(148): return("Êîëè÷åñòâî îòêðûòûõ è îòëîæåííûõ îðäåðîâ äîñòèãëî ïðåäåëà, óñòàíîâëåííîãî áðîêåðîì");
            case(149): return("Ïîïûòêà îòêðûòü ïðîòèâîïîëîæíóþ ïîçèöèþ ê óæå ñóùåñòâóþùåé â ñëó÷àå, åñëè õåäæèðîâàíèå çàïðåùåíî");
            case(150): return("Ïîïûòêà çàêðûòü ïîçèöèþ ïî èíñòðóìåíòó â ïðîòèâîðå÷èè ñ ïðàâèëîì FIFO");
            default:   return("Íåðàñïîçíàííàÿ îøèáêà"); 
   } 
} 

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---