Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
FXCasino_v1
//+------------------------------------------------------------------+
//| FXCasino_v1.mq4 |
//| Copyright © 2006, Forex-TSD.com |
//| Written by IgorAD,igorad2003@yahoo.co.uk |
//| http://finance.groups.yahoo.com/group/TrendLaboratory |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Forex-TSD.com "
#property link "http://www.forex-tsd.com/"
//---- input parameters
extern string Expert_Name = "---- FXCasino_v1 ----";
extern int Magic = 10000;
extern int Slippage = 6;
extern string Main_Parameters = " Trade Volume & Trade Method";
extern double Lots = 0.1; // Lot size
extern bool StopTrade = false; // Stop of Trade switch
extern string Data = " Input Data ";
extern int TimeZone = 0; // Difference between server time and local time
extern int StartTime = 0; // Start time for openning of orders
extern int FinTime = 23; // Time of closing pending orders
extern double BetSize = 50; // Bet Size in pips
extern bool UseMM = true; // MM Switch
extern int SpinNumber = 100; // Min Number of Spins(Trades) for Profit
extern double DeltaLong = 10; // Momentum Filter for Long in pips
extern double DeltaShort = 10; // Momentum Filter for Short in pips
extern bool UseSound = true; // Roulette Sound Switch
int cnt=0, ticket, mode=0, digit=0, numords, CountLong, CountShort, trade, contr =0;
double SellProfit=0,BuyProfit=0, Bulls, Bears, SigBulls, SigBears, Bulls1, Bears1, SigBulls1, SigBears1;
double BuyStop=0, SellStop=0, SL = 0, Lotsi=0, PrevLotsi;
bool BuyInTrade=false, SellInTrade=false;
int OrdDel;
double pastpips[];
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
// ---- Money Management
double MoneyManagement (int flag)
{
if(flag>0)
{
PastTradeProfit();
double PastProfit = pastpips[1];
if ( PastProfit < 0 ) Lotsi += Lots;
else Lotsi -= Lots;
if(Lotsi<Lots) Lotsi=Lots;
}
else Lotsi=Lots;
return(Lotsi);
}
// ---- Open Sell Orders
void SellOrdOpen()
{
double SellPrice=Low[1] - DeltaShort*Point;
if (BetSize > 0)
{
SellStop = SellPrice + 0.1*BetSize/Lots*Point;
SellProfit= SellPrice - 0.1*BetSize/Lots*Point;
}
else
{SellStop = 0; SellProfit = 0;}
ticket = OrderSend( Symbol(),OP_SELLSTOP,Lotsi,
NormalizeDouble(SellPrice, digit),
Slippage,
NormalizeDouble(SellStop , digit),
NormalizeDouble(SellProfit , digit),
"SELL",Magic,0,Red);
SellInTrade=false;
if(ticket<0)
{
Print("SELLSTOP: OrderSend failed with error #",GetLastError());
}
return(0);
}
// ---- Open Buy Orders
void BuyOrdOpen()
{
double BuyPrice =High[1] + DeltaLong*Point;
if ( BetSize > 0)
{
BuyStop = BuyPrice - 0.1*BetSize/Lots*Point;
BuyProfit=BuyPrice + 0.1*BetSize/Lots*Point;
}
else
{BuyStop=0;BuyProfit=0;}
ticket = OrderSend(Symbol(),OP_BUYSTOP, Lotsi,
NormalizeDouble(BuyPrice, digit),
Slippage,
NormalizeDouble(BuyStop , digit),
NormalizeDouble(BuyProfit , digit),
"BUY",Magic,0,Blue);
BuyInTrade=false;
if(ticket<0)
{
Print("BUYSTOP: OrderSend failed with error #",GetLastError());
//return(0);
}
return(0);
}
// ---- Delete Extra Orders
void ExtraOrdDel()
{
int total = OrdersTotal();
for (cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS);
mode=OrderType();
if ( OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if (mode==OP_BUY && !BuyInTrade) BuyInTrade =true;
if (mode==OP_SELL && !SellInTrade) SellInTrade=true;
if (mode > OP_SELL && (BuyInTrade || SellInTrade))
{
OrderDelete(OrderTicket());
}
}
}
}
// ---- Scan Trades
int ScanTrades()
{
int total = OrdersTotal();
numords = 0;
for(cnt=0; cnt<total; cnt++)
{
OrderSelect(cnt, SELECT_BY_POS);
if(OrderSymbol() == Symbol() && OrderType()>=OP_BUY && OrderMagicNumber() == Magic)
numords++;
}
return(numords);
}
// Closing of Pending Orders
void PendOrdDel()
{
int total=OrdersTotal();
for (int cnt=total-1;cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS,MODE_TRADES);
if ( OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
int mode=OrderType();
bool result = false;
switch(mode)
{
case OP_BUYSTOP : result = OrderDelete( OrderTicket() );
case OP_SELLSTOP : result = OrderDelete( OrderTicket() );
if(!result)
{
Print("OrderSend failed with error #",GetLastError());
}
OrdDel = 1;
return(0);
}
}
}
return;
}
void PastTradeProfit()
{
double Balance=0;
int total=HistoryTotal(), n=0;
ArrayResize(pastpips,total);
for (int cnt=total-1;cnt>=0;cnt--)
{
if ( OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if (!OrderSelect(cnt,SELECT_BY_POS,MODE_HISTORY) && OrderType() > OP_SELL ) continue;
if (OrderType()==OP_BUY)
{n = n+1;
pastpips[n] = MathRound((OrderClosePrice()-OrderOpenPrice())/MarketInfo(Symbol(),MODE_POINT));}
if (OrderType()==OP_SELL)
{n = n+1;
pastpips[n] = MathRound((OrderOpenPrice()-OrderClosePrice())/MarketInfo(Symbol(),MODE_POINT));}
Balance = Balance + pastpips[n];
}
if ( n > SpinNumber && Lotsi==Lots && Balance>0) StopTrade = true;
}
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if(Bars < 1) {Print("Not enough bars for this strategy");return(0);}
if(AccountFreeMargin()<(1000*Lots)){
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);}
//----
int start = StartTime + TimeZone;
int finish = FinTime + TimeZone;
digit = MarketInfo(Symbol(),MODE_DIGITS);
double Tolernce = 5;
if(!StopTrade && ScanTrades()==0 && (Hour() >= start && Hour() < finish ) && CurTime()>= Time[0] && CurTime()<= Time[0]+60)
{
if ( OrdDel == 0) Lotsi = MoneyManagement(UseMM);
else Lotsi=PrevLotsi;
if (!StopTrade)
{
if(UseSound) PlaySound("rulette.wav");
BuyOrdOpen();
SellOrdOpen();
PrevLotsi=Lotsi;
OrdDel = 0;
}
}
if (ScanTrades()>0)
{
ExtraOrdDel();
if (Hour() >= finish || StopTrade) {PendOrdDel();}
}
return(0);
}//int start
//+------------------------------------------------------------------+
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
---