AlexmanConcursExpert

Author: Copyright � 2006, komposter
Orders Execution
Checks for the total of open ordersIt Closes Orders by itself It can change open orders parameters, due to possible stepping strategyIt automatically opens orders when conditions are reached
0 Views
0 Downloads
0 Favorites
AlexmanConcursExpert
//+------------------------------------------------------------------+
//|                                         AlexmanConcursExpert.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#define copyright "Copyright © 2006, AlexMan Studio"
#define link "mailto:alexgomel@tut.by"

#import  "AlexConcursLibrary.ex4"
//Íåêîòîðûå ôóíêöèè äëÿ ðàáîòû ýêñïåðòà  
 // double StopValue(int i);
  bool IsByeTrade(int i);
  bool IsSellTrade(int i);
  bool IsStopByeTrade(int i);
  bool IsStopSellTrade(int i);
  double EmaStop(int PeriodEMA, int i);  
#import



//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   GlobalVariableSet( "AlexmanConcursExpert", 0); 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }

extern int  _MagicNumber = 1440;    // Óíèêàëüíûé ìàãè÷åñêèé íîìåð îðäåðà
extern int PeriodEMA  = 15;         // Ïåðèîä ÅÌÀ äëÿ ðàñ÷åòà ñòîï-ëîñà
extern int Zazor = 7;               // áóôôåðíûé çàïàñ íà ñòîï-ëîññ
 

// Òàê êàê ïî óñëîâèÿì êîíêóðñà âêëþ÷àåìûå ôàéëû íå ðàçðåøåíû, èñïîëüçóåìûé ôàéë
// OneOrderControl.mq4 âñòàâëåí â òåëî ýêñïåðòà íåïîñðåäñòâåííî.
// Ñïàñèáî çà ñèñòåìó óïðàâëåíèÿ îðäåðàìè Àíäðåþ Õàòèìëÿíñêîìó!

//+------------------------------------------------------------------+
//|                                              OneOrderControl.mq4 |
//|                                      Copyright © 2006, komposter |
//|                                      mailto:komposterius@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, komposter"
#property link      "mailto:komposterius@mail.ru"

int _Ticket = 0, _Type = 0; double _Lots = 0.0, _OpenPrice = 0.0, _StopLoss = 0.0;
double _TakeProfit = 0.0; datetime _OpenTime = -1; double _Profit = 0.0, _Swap = 0.0;
double _Commission = 0.0; string _Comment = ""; datetime _Expiration = -1;

void OneOrderInit( int magic )
{
	int _GetLastError, _OrdersTotal = OrdersTotal();

	_Ticket = 0; _Type = 0; _Lots = 0.0; _OpenPrice = 0.0; _StopLoss = 0.0;
	_TakeProfit = 0.0; _OpenTime = -1; _Profit = 0.0; _Swap = 0.0;
	_Commission = 0.0; _Comment = ""; _Expiration = -1;

	for ( int z = _OrdersTotal - 1; z >= 0; z -- )
	{
		if ( !OrderSelect( z, SELECT_BY_POS ) )
		{
			_GetLastError = GetLastError();
			Print( "OrderSelect( ", z, ", SELECT_BY_POS ) - Error #", _GetLastError );
			continue;
		}
		if ( OrderMagicNumber() == magic && OrderSymbol() == Symbol() )
		{
			_Ticket		= OrderTicket();
			_Type			= OrderType();
			_Lots			= NormalizeDouble( OrderLots(), 1 );
			_OpenPrice	= NormalizeDouble( OrderOpenPrice(), Digits );
			_StopLoss	= NormalizeDouble( OrderStopLoss(), Digits );
			_TakeProfit	= NormalizeDouble( OrderTakeProfit(), Digits );
			_OpenTime	= OrderOpenTime();
			_Profit		= NormalizeDouble( OrderProfit(), 2 );
			_Swap			= NormalizeDouble( OrderSwap(), 2 );
			_Commission	= NormalizeDouble( OrderCommission(), 2 );
			_Comment		= OrderComment();
			_Expiration	= OrderExpiration();
			return(0);
		}
	}
}


int Shift=1;
 
int start()
{
 //   if (CurTime() < D'2006.07.01 00:00') return(0);
    
    int _GetLastError = 0;
    double spraid = Ask-Bid;
    double EmaStopValue = EmaStop(PeriodEMA,Shift); // âûíåñ â ïåðåìåííóþ äëÿ ðàçãðóçêè ïðîöà
 
    
    //---- Çàïîìèíàåì ïàðàìåòðû îòêðûòîé ïîçèöèè (åñëè îíà åñòü)
    OneOrderInit( _MagicNumber );
  
    //---- À òåïåðü ñìîòðèì, åñòü ëè îòêðûòàÿ ïîçèöèÿ:
    if ( _Ticket > 0 )
    {
        //---- åñëè îòêðûòà ÁÀÉ-ïîçèöèÿ,
        if ( _Type == OP_BUY )
        {
            //---- åñëè ee çàêðûâàòü,
            if ( IsStopByeTrade(Shift) )
            {
                //---- çàêðûâàåì ïîçèöèþ
                if ( !OrderClose( _Ticket, _Lots, Bid, 5, Green ) )
                {
                    _GetLastError = GetLastError();
                    Print( "Îøèáêà OrderClose ¹ ", _GetLastError );
                    return(-1);
                }
            }
            //---- åñëè ñèãíàë íå èçìåíèëñÿ, âûõîäèì - ïîêà ðàíî îòêðûâàòü íîâóþ ïîçèöèþ
            else 
            {   // êñòàòè, ìîæåò ïîðà äâèãàòü ñòîï-ëîññ?
              if ((_StopLoss==0 || _StopLoss < (EmaStopValue-(Zazor+5)*Point )) && (EmaStopValue-Zazor*Point ) < Bid)
              {
                if (!OrderModify(_Ticket,_OpenPrice,EmaStopValue-Zazor*Point,_TakeProfit,0,Blue))
                  {
                    _GetLastError = GetLastError();
                    Print( "Îøèáêà -0- OrderModify ¹ ", _GetLastError );
                    return(-1);
                  }
                  GlobalVariableSet( "AlexmanConcursExpert", 1);
              }      

              if ((_StopLoss==0 || _StopLoss < _OpenPrice) && _Profit>500 )
              {
                if (!OrderModify(_Ticket,_OpenPrice,_OpenPrice,_TakeProfit,0,Blue))
                  {
                    _GetLastError = GetLastError();
                    Print( "Îøèáêà OrderModify ¹ ", _GetLastError );
                    return(-1);
                  }
                  GlobalVariableSet( "AlexmanConcursExpert", 1);
              }      


              return(0);
            }
         }    
        //---- åñëè îòêðûòà ÑÅËË-ïîçèöèÿ,
        if ( _Type == OP_SELL )
        {
            //---- åñëè åå çàêðûâàòü,
            if ( IsStopSellTrade(Shift) )
            {
                //---- çàêðûâàåì ïîçèöèþ
                if ( !OrderClose( _Ticket, _Lots, Ask, 5, Red ) )
                {
                    _GetLastError = GetLastError();
                    Print( "Îøèáêà OrderClose ¹ ", _GetLastError );
                    return(-1);
                }
            }
            //---- åñëè ñèãíàë íå èçìåíèëñÿ, âûõîäèì - ïîêà ðàíî îòêðûâàòü íîâóþ ïîçèöèþ
            else
            {   // êñòàòè, ìîæåò ïîðà äâèãàòü ñòîï-ëîññ?
              if ((_StopLoss==0 || _StopLoss > (EmaStopValue+spraid+(Zazor+5)*Point )) && (EmaStopValue+Zazor*Point ) > Bid)
              {
                if (!OrderModify(_Ticket,_OpenPrice,EmaStopValue+spraid+Zazor*Point,_TakeProfit,0,Blue))
                  {
                    _GetLastError = GetLastError();
                    Print( "Îøèáêà -1- OrderModify ¹ ", _GetLastError );
                    return(-1);
                  }
                  GlobalVariableSet( "AlexmanConcursExpert", 1);
              }      

              if ((_StopLoss==0 || _StopLoss > _OpenPrice) && _Profit>500 )
              {
                if (!OrderModify(_Ticket,_OpenPrice,_OpenPrice,_TakeProfit,0,Blue))
                  {
                    _GetLastError = GetLastError();
                    Print( "Îøèáêà OrderModify ¹ ", _GetLastError );
                    return(-1);
                  }
                  GlobalVariableSet( "AlexmanConcursExpert", 1);
              }      


              return(0);
            }
            
        }
    }
    //---- åñëè íåò ïîçèöèè, îòêðûòîé ýêñïåðòîì ( _Ticket == 0 )
    
   
        //- òîðãóåì òîëüêî åñëè êîí÷èëñÿ ñòàðûé ñèãíàë   
      if ((IsByeTrade(Shift+5) && IsStopByeTrade(Shift)) || (IsSellTrade(Shift+5) && IsStopSellTrade(Shift)) )  
                 GlobalVariableSet( "AlexmanConcursExpert", 0);
   
    
    
    //-- Îòäûõàåì, åñëè â ýòîò ÷àñ ñðàáîòàë ñòîïëîññ
    
    if(GlobalVariableGet("AlexmanConcursExpert") ==1) return(0);
    
    
    //---- Íåïëîõî áû îòêðûòü ïîçèöèþ, íàïðèìåð êóïèòü
    if ( IsByeTrade(Shift) && EmaStopValue<=Low[Shift] && EmaStopValue < Bid)
    {
        //---- îòêðûâàåì ÁÀÉ ïîçèöèþ
        if ( OrderSend( Symbol(), OP_BUY, 1.0, Ask, 5, 0.0, 0.0, "by AlexmanConcursExpert.mq4", 
              _MagicNumber, 0, Green ) < 0 )
        {
            _GetLastError = GetLastError();
            Print( "Îøèáêà OrderSend ¹ ", _GetLastError );
            return(-1);
        }
        return(0);
    }
    //---- Èëè ìîæåò ïðîäàòü?,
    if ( IsSellTrade(Shift)  && EmaStopValue>=High[Shift] && EmaStopValue> Ask)
    {
        //---- îòêðûâàåì ÑÅËË ïîçèöèþ
        if ( OrderSend( Symbol(), OP_SELL, 1.0, Bid, 5, 0.0, 0.0, "by AlexmanConcursExpert.mq4", 
              _MagicNumber, 0, Red ) < 0 )
        {
            _GetLastError = GetLastError();
            Print( "Îøèáêà OrderSend ¹ ", _GetLastError );
            return(-1);
        }
        return(0);
    }

    return(0);
}

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