0
Views
0
Downloads
0
Favorites
2008-BUY-SELL
///+-----------------------------------------------------------------+
//| Original idea from: BUY-SELL STOP.mq4 |
//| Copyright © 2008, Guillermo Arango |
//| williama@mail2airforce.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, Rob Turcotte"
#property link "acceleratorfx@gmail.com"
#property show_inputs
extern int Level = 10;
extern double Lots = 0.1;
extern int TakeProfit=140;
extern bool Place_buylimit = true;
extern bool Place_selllimit = true;
extern int GridSpacing=35;
extern double GridUpperLimit=0;
extern double GridLowerLimit=0;
extern double StartPoint= 202.45;
extern double MagicNum = 1001;
int totalOpenOrders = 0;
bool OpenOrders = false;
int total, cnt, totalBuyStop, totalSellStop, totalBuy, totalSell, TSS, TBS;
double spread;
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----Establish if Stop Order filled
total = OrdersTotal();
totalBuyStop = 0;
totalSellStop = 0;
totalSell = 0;
totalBuy = 0;
for(cnt = 0; cnt < total; cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNum)
{
if(OrderType() == OP_BUYSTOP)
totalBuyStop++;
if(OrderType() == OP_BUY)
totalBuy++;
}
}
for(cnt = 0; cnt < total; cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNum)
{
if(OrderType() == OP_SELLSTOP)
totalSellStop++;
if(OrderType() == OP_SELL)
totalSell++;
}
}
TSS = totalSellStop;
TBS = totalBuyStop;
Comment("TSS=", TSS, " TBS=", TBS);
if(totalOpenOrders < (totalBuy + totalSell)) // Order just opened, open more pending orders
{ totalOpenOrders = totalBuy + totalSell;
OpenPendingOrders();
}
if(totalOpenOrders > 0)
OpenOrders = true;
if(OpenOrders == true && (totalBuy + totalSell) == 0) // all orders closed, close pending orders
{ ClosePendingOrders();
totalOpenOrders = 0;
}
if(totalBuyStop == 0 && totalSellStop == 0) //no open orders or pending orders, start cycle again
{ StartPoint = Ask;
OpenPendingOrders();
}
return(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| script "send pending order with expiration data" |
//+------------------------------------------------------------------+
int OpenPendingOrders()
{
int ticket;
double CurrentLevel=0.00;
double point;
int TakeProfit1=TakeProfit;
double StartPoint1=StartPoint;
double GridUpperLimit= StartPoint1 + ((TakeProfit1+8)*Point);
double GridLowerLimit= StartPoint1 - (TakeProfit1*Point);
//----
spread = MarketInfo(Symbol(), MODE_SPREAD);
point=MarketInfo(Symbol(),MODE_POINT);
int total;
total=OrdersTotal();
//----
CurrentLevel = GridLowerLimit;
while(CurrentLevel < GridUpperLimit)
while(true)
{
if (Place_selllimit)
if(CurrentLevel < (Bid - (Point * Level)))
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,CurrentLevel,0,GridUpperLimit,GridLowerLimit+(spread*Point),"SELLSTOP",MagicNum,0,Red);
if (Place_buylimit)
if(CurrentLevel > (Ask + (Point * Level)) && CurrentLevel < (Ask + (Point * TakeProfit))) //ONLY BUY ABOVE ASK PRICE
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,CurrentLevel,0,GridLowerLimit,GridUpperLimit-(spread*Point),"BUYSTOP",MagicNum,0,Green);
CurrentLevel = CurrentLevel + (GridSpacing * Point);
if(CurrentLevel > GridUpperLimit)
break;
}
//----
return(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
// Close Pending Orders
int ClosePendingOrders()
{
int total = OrdersTotal();
for(int i=total-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS);
int type = OrderType();
bool result = false;
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNum)
{
switch(type)
{
//Close pending orders
case OP_BUYLIMIT :
case OP_BUYSTOP :
case OP_SELLLIMIT :
case OP_SELLSTOP : result = OrderDelete( OrderTicket() );
}
OpenOrders = false;
if(result == false)
{
Alert("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
Sleep(3000);
}
}
}
return(0);
}
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
---