Kod: Zaznacz cały
input bool use_fixed_lot=false; //Stały lot?
extern double Depo=100; //Od kwoty depozytu...
extern double lot=0.01; //Lot
Kod: Zaznacz cały
double GetLot()
{
if(use_fixed_lot==true)
return NormalizeDouble(lot,2);
double balance=AccountBalance();
double minlot=MarketInfo(Symbol(),MODE_MINLOT);
double maxlot=MarketInfo(Symbol(),MODE_MAXLOT);
double Lot=balance*lot/Depo;
if(Lot<minlot)
Lot=minlot;
if(Lot>maxlot)
Lot=maxlot;
return NormalizeDouble(Lot,2);
}
Kod: Zaznacz cały
//+------------------------------------------------------------------+
//| Stochatic TREND.mq4 |
//+------------------------------------------------------------------+
#property copyright "by IvanVP"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Âőîäíűĺ ďŕđŕěĺňđű ńîâĺňíčęŕ |
//+------------------------------------------------------------------+
input string first="Îáůčĺ ďŕđŕěĺňđű ńîâĺňíčęŕ:"; //1)
extern int SL=60;//Ńňîďëîńń â ďóíęňŕő
extern int TP=30;//Ňĺéęďđîôčň â ďóíęňŕő
input bool useCT_close=true;//Čcďîëüçîâŕňü çŕęđűňčĺ ďî ńňđŕňĺăčč?
input bool closeAllOrders=true;//Çŕęđűâŕňü âńĺ îđäĺđŕ?(false - ňîëüęî ďđčáűëüíűĺ)
extern int slippage=3;//Ďđîńęŕëüçűâŕíčĺ
input bool use_fixed_lot=true; //Čńďîëüçîâŕňü ôčęńčđîâŕííűé ëîň?
extern double Depo=1000; //Íŕ ňŕęîé îáúĺě äĺďîçčňŕ...
extern double lot=0.1; //..âîçüěĺň ňŕęîé ëîň
input int MagicNumber=5225;
input string se="Ďŕđŕěĺňđű číäčęŕňîđŕ Moving Average:"; //2)
input int MA_slow_period=55;//Ďĺđčîä SĚŔ íŕ H4
input string th="Ďŕđŕěĺňđű číäčęŕňîđŕ Stochastic:"; //3)
input int K_period=5;//K period
input int D_period=3;//D period
input int slowing=3;//Slowing
input int overbought_low_ST=75;//Íčćíĺĺ çíŕ÷ĺíčĺ çîíű ďĺđĺęóďëĺííîńňč
input int oversold_high_ST=25;//Âĺđőíĺĺ çíŕ÷ĺíčĺ çîíű ďĺđĺęóďëĺííîńňč
input int shiftST=1; //Íŕ ęŕęîě áŕđĺ áđŕňü çíŕ÷ĺíč˙ číäčęŕňîđŕ?
input string four="Ďŕđŕěĺňđű číäčęŕňîđŕ RSIMas:"; //4)
extern int stochastic_Period_K=24;//Ę period äë˙ Stochastic
extern int stochastic_Period_D=3;//D period äë˙ Stochastic
extern int stochastic_Period_Slowing=3;//Slowing äë˙ Stochastic
extern int RSIPeriod=14; //Ďĺđčîä äë˙ RSI
input int overbought_low_RS=80;//Íčćíĺĺ çíŕ÷ĺíčĺ çîíű ďĺđĺęóďëĺííîńňč
input int oversold_high_RS=20;//Âĺđőíĺĺ çíŕ÷ĺíčĺ çîíű ďĺđĺęóďëĺííîńňč
input int shiftRS=1; //Íŕ ęŕęîě áŕđĺ áđŕňü çíŕ÷ĺíč˙ číäčęŕňîđŕ?
input string five="Ďŕđŕěĺňđű áĺçóáűňęŕ:"; //5)
input bool useBreakeven=false;//Čńďîëüçîâŕňü ÁÓ?
extern int whenStartBreakeven=20;//×ĺđĺç ńęîëüęî ďóíęňîâ ŕęňčâčđîâŕňü ÁÓ?
extern int breakevenHowMutńh=1;//Ńęîëüęî ďóíęňîâ ďđčáűëč çŕôčęńčđîâŕňü?
#define BUY 1
#define SELL 2
bool useFixedTP=true;//Čńďîëüçîâŕňü ôčęńčđîâŕííűé takeprofit?
int stochastic_history=2500;//History
int shiftMA=1; //Íŕ ęŕęîě áŕđĺ áđŕňü çíŕ÷ĺíč˙ číäčęŕňîđŕ?
double tempMA=0;
double tempSt_0=0;
double tempSt_1=0;
double tempRSIM = 0;
double tempMAFH = 0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
GlobalVariableSet("check",false);
if(Digits==3 || Digits==5)
{
whenStartBreakeven=10*whenStartBreakeven;
breakevenHowMutńh=10*breakevenHowMutńh;
TP=10*TP;
SL= 10*SL;
slippage=10*slippage;
}
NewBar();
PrintInfo();
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
Breakeven();
if(NewBar() && GlobalVariableGet("check"))
{
if(CheckMA()==SELL && CheckRSIMas()==SELL && CheckStochastic()==SELL && OrderIsOpened(SELL)==false && GlobalVariableGet("signal_sell")==false)
OpenOrder(SELL);
if(CheckMA()==BUY && CheckRSIMas()==BUY && CheckStochastic()==BUY && OrderIsOpened(BUY)==false && GlobalVariableGet("signal_buy")==false)
OpenOrder(BUY);
if(useCT_close)
{
if(CheckStochastic()==BUY) //â çîíĺ ďĺđĺďđîäŕííîńňč
CloseOrder(SELL);
if(CheckStochastic()==SELL) //â çîíĺ ďĺđĺęóďëĺííîńňč
CloseOrder(BUY);
}
GlobalVariableSet("check",false);
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PrintInfo()
{
tempMA=NormalizeDouble(iMA(Symbol(),PERIOD_H4,MA_slow_period,0,0,0,shiftMA),Digits);
tempSt_0=NormalizeDouble(iStochastic(Symbol(),Period(),K_period,D_period,slowing,0,0,0,shiftST),0);
tempSt_1=NormalizeDouble(iStochastic(Symbol(),Period(),K_period,D_period,slowing,0,0,1,shiftST),0);
tempRSIM=NormalizeDouble(iCustom(Symbol(),Period(),"RSIMas",stochastic_history,stochastic_Period_K,stochastic_Period_D,stochastic_Period_Slowing,RSIPeriod,0,shiftRS),0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double GetLot()
{
if(use_fixed_lot==true)
return NormalizeDouble(lot,2);
double balance=AccountBalance();
double minlot=MarketInfo(Symbol(),MODE_MINLOT);
double maxlot=MarketInfo(Symbol(),MODE_MAXLOT);
double Lot=balance*lot/Depo;
if(Lot<minlot)
Lot=minlot;
if(Lot>maxlot)
Lot=maxlot;
return NormalizeDouble(Lot,2);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void Breakeven()
{
if(useBreakeven)
{
if(OrdersTotal()!=0)
for(int i=OrdersTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS)==true)
if(OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_SELL)//âűáđŕëč îňęđűňűé îđäĺđ
if(OrderOpenPrice()-Bid>=whenStartBreakeven*Point) //Ĺńëč öĺíŕ óřëŕ íŕ N ďóíęňîâ âíčç
{
double sl=NormalizeDouble(OrderOpenPrice()-breakevenHowMutńh*Point,Digits);
if(sl!=OrderStopLoss())
if(OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,clrNONE)==false)
Fun_Error(GetLastError());
}
if(OrderType()==OP_BUY)//âűáđŕëč îňęđűňűé îđäĺđ
if(Ask-OrderOpenPrice()>=whenStartBreakeven*Point) //Ĺńëč öĺíŕ óřëŕ íŕ N ďóíęňîâ ââĺđő
{
double sl=NormalizeDouble(OrderOpenPrice()+breakevenHowMutńh*Point,Digits);
if(sl!=OrderStopLoss())
if(OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,clrNONE)==false)
Fun_Error(GetLastError());
}
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool OrderIsOpened(int type)
{
int count_open_orders=0;
if(type==SELL)
for(int i=OrdersTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS)==true)
if(OrderMagicNumber()==MagicNumber && OrderType()==OP_SELL)
return true;
if(type==BUY)
for(int i=OrdersTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS)==true)
if(OrderMagicNumber()==MagicNumber && OrderType()==OP_BUY)
return true;
return false;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CloseOrder(int type)
{
for(int i=OrdersTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS)==true && OrderMagicNumber()==MagicNumber)
{
if(OP_BUY==OrderType() && type==BUY)
{
if(closeAllOrders)
{
if(OrderClose(OrderTicket(),OrderLots(),Bid,slippage,clrNONE)==false)
Fun_Error(GetLastError());
}
else
{
if(OrderProfit()>0)
if(OrderClose(OrderTicket(),OrderLots(),Bid,slippage,clrNONE)==false)
Fun_Error(GetLastError());
}
}
if(OP_SELL==OrderType() && type==SELL)
{
if(closeAllOrders)
{
if(OrderClose(OrderTicket(),OrderLots(),Bid,slippage,clrNONE)==false)
Fun_Error(GetLastError());
}
else
{
if(OrderProfit()>0)
if(OrderClose(OrderTicket(),OrderLots(),Bid,slippage,clrNONE)==false)
Fun_Error(GetLastError());
}
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OpenOrder(int type)
{
if(type==BUY)
{
double sl=NormalizeDouble(Ask-SL*Point,Digits);
double tp=0;
if(useFixedTP)
tp=NormalizeDouble(Ask+TP*Point,Digits);
if(OrderSend(Symbol(),OP_BUY,lot,Ask,slippage,sl,tp,NULL,MagicNumber,0,clrNONE)==false)
Fun_Error(GetLastError());
else GlobalVariableSet("signal_buy",true);
}
if(type==SELL)
{
double sl=NormalizeDouble(Bid+SL*Point,Digits);
double tp=0;
if(useFixedTP)
tp=NormalizeDouble(Bid-TP*Point,Digits);
if(OrderSend(Symbol(),OP_SELL,lot,Bid,slippage,sl,tp,NULL,MagicNumber,0,clrNONE)==false)
Fun_Error(GetLastError());
else GlobalVariableSet("signal_sell",true);
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int CheckMA()
{
tempMA=NormalizeDouble(iMA(Symbol(),PERIOD_H4,MA_slow_period,0,0,0,shiftMA),Digits);
if(tempMA<Ask)
{
GlobalVariableSet("signal_sell",false);
return BUY;
}
if(tempMA>Bid)
{
GlobalVariableSet("signal_buy",false);
return SELL;
}
GlobalVariableSet("signal_sell",false);
GlobalVariableSet("signal_buy",false);
return false;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int CheckStochastic()
{
tempSt_0=NormalizeDouble(iStochastic(Symbol(),Period(),K_period,D_period,slowing,0,0,0,shiftST),0);
tempSt_1=NormalizeDouble(iStochastic(Symbol(),Period(),K_period,D_period,slowing,0,0,1,shiftST),0);
if(overbought_low_ST<tempSt_0 && overbought_low_ST<tempSt_1)
{
GlobalVariableSet("signal_sell",false);
return BUY;
}
if(tempSt_0<oversold_high_ST && tempSt_1<oversold_high_ST)
{
GlobalVariableSet("signal_buy",false);
return SELL;
}
GlobalVariableSet("signal_sell",false);
GlobalVariableSet("signal_buy",false);
return false;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int CheckRSIMas()
{
tempRSIM=NormalizeDouble(iCustom(Symbol(),Period(),"RSIMas",stochastic_history,stochastic_Period_K,stochastic_Period_D,stochastic_Period_Slowing,RSIPeriod,0,shiftRS),0);
if(overbought_low_RS<tempRSIM)
{
GlobalVariableSet("signal_sell",false);
return BUY;
}
if(tempRSIM<oversold_high_RS && tempRSIM!=0)
{
GlobalVariableSet("signal_buy",false);
return SELL;
}
GlobalVariableSet("signal_sell",false);
GlobalVariableSet("signal_buy",false);
return false;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool NewBar()
{
if((TimeCurrent()-Time[0])<=1)
return true;
else
{
GlobalVariableSet("check",true);
return false;
}
}
//+------------------------------------------------------------------+
//| Ôóíęöč˙ îáđŕáîňęč îřčáîę |
//+------------------------------------------------------------------+
int Fun_Error(int Error) // Ô-č˙ îáđŕáîň îřčáîę
{
switch(Error)
{ // Ďđĺîäîëčěűĺ îřčáęč
case 4: Print("Server is busy..");
if(IsTesting()==false)
Sleep(3000); // Ďđîńňîĺ đĺřĺíčĺ
return(1); // Âűőîä čç ôóíęöčč
case 135:Print("Price is changed..");
RefreshRates(); // Îáíîâčě äŕííűĺ
return(1); // Âűőîä čç ôóíęöčč
case 136:Print("Waiting for a new tick..");
while(RefreshRates()==false) // Äî íîâîăî ňčęŕ
Sleep(1); // Çŕäĺđćęŕ â öčęëĺ
return(1); // Âűőîä čç ôóíęöčč
case 137:Print("Broker is busy..");
if(IsTesting()==false)
Sleep(3000); // Ďđîńňîĺ đĺřĺíčĺ
return(1); // Âűőîä čç ôóíęöčč
case 146:Print("Trading system is busy..");
if(IsTesting()==false)
Sleep(500); // Ďđîńňîĺ đĺřĺíčĺ
return(1); // Âűőîä čç ôóíęöčč
// Ęđčňč÷ĺńęčĺ îřčáęč
case 2: Print("Error. Sorry.");
return(0); // Âűőîä čç ôóíęöčč
case 5: Print("Old version of terminal");
//Work=false; // Áîëüřĺ íĺ đŕáîňŕňü
return(0); // Âűőîä čç ôóíęöčč
case 64: Print("Account locked");
// Work=false; // Áîëüřĺ íĺ đŕáîňŕňü
return(0); // Âűőîä čç ôóíęöčč
case 133:Print("Trading desallowed");
return(0); // Âűőîä čç ôóíęöčč
case 134:Print("Not enough money, sorry.");
return(0); // Âűőîä čç ôóíęöčč
default: Print("Oops.. error ",Error); // Äđóăčĺ âŕđčŕíňű
return(0); // Âűőîä čç ôóíęöčč
}
}
//+------------------------------------------------------------------+
Problem z MM już rozwiązany za pomoc dziękuje
Po pewnych przeróbkach i wstępnej optymalizacji Robot daje dobre zyski? Oczywiście w testach

-- Dodano: sob 30-07-2016, 17:17 --
Przewidział referendum w Angli?