Price Data Components
Orders Execution
0
Views
0
Downloads
0
Favorites
e-Skoch_Otlog_qurder
//+------------------------------------------------------------------+
//| e-Skoch_Îòëîæ_Îðäåð_V_2-NEW-2 + Lot.mq4 |
//| Copyright © 2012, MetaQuotes Software Corp. |
//| http://www.fxgeneral.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, MetaQuotes Software Corp."
#property link "http://www.fxgeneral.com"
#include <WinUser32.mqh>
extern double lot = 0.01;
extern int _takeProfit_BUY = 600;
extern int _stopLoss_BUY = 100;
extern int _slippage = 30;//ðåãóëèðîâêà ïðîñêàëüçûâàíèÿ
extern int _takeProfit_SELL = 600;
extern int _stopLoss_SELL = 30;
extern int key = 0;
extern int _pointBuy = 700;// Îòñòóï öåíû îò ÕÀÉ
extern int _pointSell = 700;// Îòñòóï öåíû îò ËÎÉ
extern bool CheckTrade = true; //Íå ñòàâèòü Stop îðäåð ïðè óæå îòêðûòîì
extern double _percentProfit=2.2;///// - Ïðîôåöèò
datetime BARflag = 0; //--Äëÿ ïîáàðîâîãî ðåæèìà
int _extType=-1;
double _workLots=0.0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
int ticketBuy,ticketSell, expiration;
double point, _price, oldprice;
double _tpBuy=0.0, _tpSell=0.0, _slBuy=0.0, _slSell=0.0;
datetime now = Time[0];//--Äëÿ ïîáàðîâîãî ðåæèìà
if(BARflag >= now) return(0);//--Äëÿ ïîáàðîâîãî ðåæèìà
BARflag = now;//--Äëÿ ïîáàðîâîãî ðåæèìà
if(totalO(-1,key)==0) GlobalVariableSet(StringConcatenate("eq_",key),AccountEquity());
Comment("Êîíòðîëüíîå ýêâèòè ",GlobalVariableGet(StringConcatenate("eq_",key)),"\n",
"Òåêóùåå ýêâèòè ",AccountEquity(),"\n",
"Òåêóùèé ïðîöåíò ðîñòà Ýêâèòè ",100*(AccountEquity()-GlobalVariableGet(StringConcatenate("eq_",key)))/GlobalVariableGet(StringConcatenate("eq_",key))," %");
_CheckProfit();///// - Ïðîôåöèò
//----
point=MarketInfo(Symbol(),MODE_POINT);
//----
if (lot<MarketInfo(Symbol(),MODE_MINLOT)) lot=MarketInfo(Symbol(),MODE_MINLOT);
if (lot<MarketInfo(Symbol(),MODE_MINLOT)) lot=MarketInfo(Symbol(),MODE_MINLOT);
if (iLow(Symbol(),PERIOD_D1,1)>iLow(Symbol(),PERIOD_D1,0))
if (Low[2]>Low[1] && !_CheckTradeOrder(OP_BUY))
{
if(!CheckTrade || (CheckTrade && !_CheckTradeOrder(OP_BUY)))
{
if (_extType!=OP_BUYSTOP)
{
if (_stopLoss_BUY>0)
{
_slBuy=NormalizeDouble(Low[1]-_stopLoss_BUY*Point, Digits);
_slSell=NormalizeDouble(Low[1]-_stopLoss_BUY*Point, Digits);
}
if (_takeProfit_BUY>0)
{
_tpBuy=NormalizeDouble(Bid+_takeProfit_BUY*Point, Digits);
_tpSell=NormalizeDouble(Bid+_takeProfit_BUY*Point, Digits);
}
_price = Low[1]+_pointBuy*Point;
oldprice = PriceStopOrder(OP_BUYSTOP);
if(oldprice == -1 || _price < oldprice) { //Íåò îðäåðà èëè Íîâàÿ öåíà ëó÷øå//
_CheckOrder(OP_BUYSTOP);
while(IsTradeContextBusy()) Sleep(1000);
RefreshRates();
ticketBuy=OrderSend(Symbol(),OP_BUYSTOP, getlotlast(key),_price,_slippage,_slBuy,_tpBuy,"",key,0,Green);
} //íåò îðäåðà èëè íîâàÿ öåíà ëó÷øå//
}
}
}
if (iHigh(Symbol(),PERIOD_D1,1)<iHigh(Symbol(),PERIOD_D1,0))
if (High[2]<High[1])
if(!CheckTrade || (CheckTrade && !_CheckTradeOrder(OP_SELL)))
{
if (_extType!=OP_SELLSTOP)
{
if (_stopLoss_SELL>0)
{
_slBuy=NormalizeDouble(High[1]+_stopLoss_SELL*Point, Digits);
_slSell=NormalizeDouble(High[1]+_stopLoss_SELL*Point, Digits);
}
if (_takeProfit_SELL>0)
{
_tpBuy=NormalizeDouble(Ask-_takeProfit_SELL*Point, Digits);
_tpSell=NormalizeDouble(Ask-_takeProfit_SELL*Point, Digits);
}
_price = High[1]-_pointSell*Point;
oldprice = PriceStopOrder(OP_SELLSTOP);
if(oldprice == -1 || _price > oldprice) { //Íåò îðäåðà èëè Íîâàÿ öåíà ëó÷øå//
_CheckOrder(OP_SELLSTOP);
while(IsTradeContextBusy()) Sleep(1000);
RefreshRates();
ticketSell=OrderSend(Symbol(),OP_SELLSTOP, getlotlast(key),_price,_slippage,_slSell,_tpSell,"",key,0,Red);
} //íåò îðäåðà èëè íîâàÿ öåíà ëó÷øå//
}
}
//----
return(0);
}
//+-------------------------------------------------------------++++
//èùåì ïîñëåäíèé çàêðûòûé îáúåì
double getlotlast(int _key)
{
double _lot = lot ;
for(int i=OrdersHistoryTotal(); i>=0; i--) {
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)&&OrderSymbol()==Symbol()) {
if((OrderMagicNumber()==_key || _key == 0) && OrderType()<=1){
if(OrderProfit()<0){
int kol=getLastType(_key)*(-1);
_lot=((kol-MathMod(kol,2))/2+1)*lot;
break;
}
if(OrderProfit()>=0) break;
}
}
}
return(_lot);
}
//êàêîé òèï îðäåðà çàêðûëñÿ ïîñëåäíèé è ñêîëüêî îðäåðîâ â ñåðèè
int getLastType(int _key)
{
int KolType=0;
int j=1;
for(int i=OrdersHistoryTotal() ; i>=0; i--) {
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY ) && OrderSymbol()==Symbol()) {
if((OrderMagicNumber()==_key || _key == 0) && OrderType()<=1) {
if(j==1 && OrderProfit()>=0)KolType++;
if(j==1 && OrderProfit()<0)KolType--;
if(j!=1 && OrderProfit()>=0 && KolType>0)KolType++;
if(j!=1 && OrderProfit()>=0 && KolType<0)break;
if(j!=1 && OrderProfit()<0 && KolType<0)KolType--;
if(j!=1 && OrderProfit()<0 && KolType>0)break;
j++;
}
}
}
return(KolType);
}
//+-------------------------- Ïðîôåöèò ---------------------------+
void _CheckProfit(){
if (100*(AccountEquity()-GlobalVariableGet(StringConcatenate("eq_",key)))/GlobalVariableGet(StringConcatenate("eq_",key))>=_percentProfit)
_OrderClose();
return;
}
//+--------------------------------+
void _OrderClose(){
int i;
double _price=0.0;
_OrderDelete();
if (OrdersTotal()>0){
for (i=OrdersTotal()-1; i>=0; i--){
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol()){
if(OrderMagicNumber() == key || key == 0) {
RefreshRates();
if (OrderType()==OP_SELL) _price=Ask;
if (OrderType()==OP_BUY) _price=Bid;
OrderClose(OrderTicket(),OrderLots(),_price,5,0);
}
}
}
}
return;
}
//+--------------------------------+
void _OrderDelete(){
int i;
if (OrdersTotal()>0){
for (i=OrdersTotal()-1; i>=0; i--){
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderSymbol()==Symbol()){
if(OrderMagicNumber() == key || key == 0) {
if (OrderType()>1 && OrderType()<6) {//äîáàâëåííî
for(int k = 0;k < 3; k++) if(OrderDelete(OrderTicket())) break;
}
}
}
}
}
return;
}
//------------------------------------------------+
/*Ñ÷èòàåì êîëè÷åñòâî îðäåðîâ
âõîäÿùèå
int type (if -1 all type)
OP_BUY 0 Ïîêóïêà
OP_SELL 1 Ïðîäàæà
OP_BUYLIMIT 2 Îòëîæåííûé îðäåð BUY LIMIT
OP_SELLLIMIT 3 Îòëîæåííûé îðäåð SELL LIMIT
OP_BUYSTOP 4 Îòëîæåííûé îðäåð BUY STOP
OP_SELLSTOP 5 Îòëîæåííûé îðäåð SELL STOP
int _key MagicNumber
*/
int totalO(int type,int _key)
{
int TotalNumber = 0;
for(int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol() == Symbol()) {
if(OrderMagicNumber() ==_key || _key == 0) {
if (OrderType()==type||type==-1) TotalNumber++;
}
}
}
return(TotalNumber);
}
//+------------------------------------------------------------------+
int _CheckOrder(int _checkType=0)
{
int i;
if (OrdersTotal()>0){
for (i=0; i<=OrdersTotal()-1; i++){
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symbol()){
if(OrderMagicNumber()==key || key == 0) {
if (OrderType()==_checkType) {
for(int k = 0;k < 3; k++) if(OrderDelete(OrderTicket())) break;
}
}
}
}
}
return(0);
}
//+------------------------------------------------------------------+
bool _CheckTradeOrder(int _checkType=0){
int i;
if (OrdersTotal()>0){
for (i=0; i<OrdersTotal(); i++){
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symbol()){
if(OrderMagicNumber()==key || key == 0) {
if (OrderType()==_checkType) return(true);
}
}
}
}
return(false);
}
//+------------------------------------------------------------------+
double PriceStopOrder(int _checkType)
{
double price;
int i;
price = -1;
if (OrdersTotal()>0){
for (i=0; i<OrdersTotal(); i++){
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symbol()){
if (OrderType()==_checkType && (OrderMagicNumber()==key || key == 0))
if(price == -1) { price = OrderOpenPrice( ); continue; }
if(OrderType()==OP_BUYSTOP && price < OrderOpenPrice()) price = OrderOpenPrice( );
if(OrderType()==OP_SELLSTOP && price > OrderOpenPrice()) price = OrderOpenPrice( );
}
}
}
return(price);
}
//+------------------------------------------------------------------+++
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---