VininE_Cyber_Cycle

Author: Copyright � 2008, Victor Nicolaev
Price Data Components
Series array that contains close prices for each barSeries array that contains open prices of each bar
Orders Execution
It automatically opens orders when conditions are reachedChecks for the total of open ordersIt Closes Orders by itself
0 Views
0 Downloads
0 Favorites
VininE_Cyber_Cycle
//+------------------------------------------------------------------+
//|                                                     VininE_Cyber Cycle |
//|                                Copyright © 2008, Victor Nicolaev |
//|                                            e-mail: vinin@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, Victor Nicolaev"
#property link      "e-mail: vinin@mail.ru"

//===================================================================
extern string  S1             = "Ïàðàìåòðû èíäèêàòîðà";
extern double alpha=0.01;
extern double betta=1.0;
extern double level_Buy_Open=0.5;
extern double level_Sell_Open=-0.5;
extern double level_Buy_Close=0.5;
extern double level_Sell_Close=-0.5;


extern string  S2             = "Ïàðàìåòðû MM";
extern double  Lots           =  1  ;
extern int     StopLoss       = 0	;              // Ñòîïëîññ 
extern int     TakeProfit     = 0	;              // Ñòîïëîññ 
extern int Slippage=50;

extern string  S3             = "Ïàðàìåòðû Ñîâåòíèêà";
extern int     Magic        = 20090309;
extern string  _comment      = "";           // Êîììåíòàðèé 

color clOpenBuy=Red; 
color clOpenSell=Blue;
color clCloseBuy=Red; 
color clCloseSell=Blue;


int Order_Count[6];
string NameOP[]={"BUY","SELL","BUYLIMMIT","SELLLIMIT","BUYSTOP","SELLSTOP"};

#include <stdlib.mqh>
#include <WinUser32.mqh>

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init() {//0
   GetLastError();         // Î÷èñòêà ïîñëåäíåé îøèáêè


return(0);}//0



//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit() {
   return(0); 
}


//+------------------------------------------------------------------+
//Ðàáîòà ïî îòäåëüíîé ÒÑ
//+------------------------------------------------------------------+ 
int start() { 
   if (!NevBar()) return(0);
   if (CheckClose()) Order_Close();
   
   int cmd1=CheckOpen();
   if (cmd1==-1) return(0);
   SetOrder(cmd1);
   return(0);
} 

bool SetOrder(int OP){
   bool Res=false;
   int cmd=MathAbs(OP-1);
   Order_Count_Calculate();          // Ïîäñ÷åò îòêðûòûõ ïîçèöèé   
   if (Order_Count[cmd]>0)             // Êîíòðîëü ïîçèöèé äëÿ çàêðûòèÿ
      Order_Close(cmd);
   if (Order_Count[OP]==0)             // Êîíòðîëü ïîçèöèé äëÿ îòêðûòèÿ
      Order_Open( OP);
   return(Res);
}

int CheckOpen(){
   int Res=-1;
   double tmp1=iCustom(NULL,0,"VininI_Cyber Cycle(V2)", alpha, betta,PRICE_OPEN,0,1);
   double tmp2=iCustom(NULL,0,"VininI_Cyber Cycle(V2)", alpha, betta,PRICE_OPEN,0,2);
   if (tmp1>level_Buy_Open) Res=OP_BUY;
   if (tmp1<level_Sell_Open) Res=OP_SELL;

   
   return(Res);
   
}

bool CheckClose(){
   bool Res=false;
   double tmp1=iCustom(NULL,0,"VininI_Cyber Cycle(V2)", alpha, betta,PRICE_OPEN,0,1);
   if (tmp1<level_Buy_Close && tmp1>level_Sell_Close) Res=true;

   
   return(Res);
   
}



bool NevBar() {
   static int PrevBar=0;
   int NevBar=Time[0];
   if (PrevBar==NevBar) return(false);
   PrevBar=NevBar;
   return(true);
}



//======================================================================================================
// Ôóíêöèÿ ëîãè÷åñêîãî ñðàâíåíèÿ
//=====================================================================================================
double iif(bool A, double B, double C) {if(A) return(B); return(C); }

//======================================================================================================
// Ôóíêöèÿ îòêðûòèÿ îðäåðîâ
//=====================================================================================================
void Order_Open(int OP){
   int err=GetLastError();
   RefreshRates();

   int cmd=iif(OP==OP_BUY,1,-1);
   double _ask     =MarketInfo(Symbol(),MODE_ASK);
   double _bid     =MarketInfo(Symbol(),MODE_BID);
   double _point   =MarketInfo(Symbol(),MODE_POINT);
   double _digits  =MarketInfo(Symbol(),MODE_DIGITS);
   double price= iif(OP==OP_BUY,_ask,_bid);
   double _sl=NormalizeDouble(iif(StopLoss==0,0,price-cmd*StopLoss*_point),_digits);
   double _tp=NormalizeDouble(iif(TakeProfit==0,0,price+cmd*TakeProfit*_point),_digits);
   double lots=GetLots();      

   OrderSend(Symbol(), OP,  lots, price, 3,_sl,_tp,_comment,Magic, 0); 
   err=GetLastError();
   if (err>0) Print(Ask," ;", Bid, " ;", price," ;",_sl," ;",_tp);

}
 
//======================================================================================================
// Ôóíêöèÿ çàêðûòèÿ îðäåðîâ
//=====================================================================================================
void Order_Close(int OP=-1){
   bool res;
   GetLastError();
   for(int i = OrdersTotal() - 1;  i >= 0;  i--) {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))   continue;
      if (OrderSymbol() != Symbol())                     continue;
      if (OrderMagicNumber() != Magic)                   continue;
      if (OrderType()!=OP && OP!=-1)                     continue;
      
      RefreshRates();
      double _ask      =MarketInfo(Symbol(),MODE_ASK);
      double  _bid     =MarketInfo(Symbol(),MODE_BID);
      double  _point   =MarketInfo(Symbol(),MODE_POINT);
      double  _digits  =MarketInfo(Symbol(),MODE_DIGITS);

      double ClosePrice=NormalizeDouble(iif(OrderType()==OP_BUY,_bid, _ask),_digits);
      res=OrderClose(OrderTicket(), OrderLots(), ClosePrice, 3, iif(OrderType()==OP_BUY,clCloseBuy,clCloseSell));
      if (!res) {
         int err=GetLastError();
         Print("Error(",err,") delete order ",NameOP[OP],": ",ErrorDescription(err));
      }
   }
}

double NormalizePrice(double Price){
   RefreshRates();
   double Res=Price;
   double MinStop=MarketInfo(Symbol(),MODE_STOPLEVEL);
   if (MathAbs(Price-Close[0])<MinStop*Point) {
      if (Price<Close[0]) Res=Close[0]-MinStop*Point;
      else Res=Close[0]+MinStop*Point;
   }
   Res=NormalizeDouble(Res,Digits);
   return(Res);
}

//===============================================================================
// Ôóíêöèÿ âîçâðàùàþøàÿ êîëè÷åñòâî îðäåðîâ îïðåäåëåííîãî òèïà èñõîäà èç çàäàííûõ îãðàíè÷åíèé
//===============================================================================
void Order_Count_Calculate(){
   ArrayInitialize(Order_Count,0);
   for (int i = OrdersTotal() - 1;  i >= 0;  i--) {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))   continue;
      if (OrderSymbol() != Symbol())                     continue;
      if (OrderMagicNumber() != Magic)                   continue;
      Order_Count[OrderType()]++;
   }
}

//===============================================================================
// Ôóíêöèÿ ðàñ÷èòûâàåò îáúåì ëîòà èñõîäÿ èç çàäàííîãî óðîâíÿ ðèñêà
//   ëîò=Ý/(ÄÄ/10/(%Ý*%Ð)+Ì)
//   
//   Ì - ìàðæà, çàëîã íà 1 ëîò
//
//===============================================================================
double GetLots() {
   double LotMin=MarketInfo(Symbol(),MODE_MINLOT);
   double LotMax=MarketInfo(Symbol(),MODE_MAXLOT);
   double LotStep=MarketInfo(Symbol(),MODE_LOTSTEP);
   double lot=MathRound(Lots/LotStep)*LotStep;
   
   
   
   lot=MathMax(LotMin,MathMin(LotMax,lot));
   
   return(lot); 
}

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 ---