Исходный код · ID 297
ma_angle_eav3.mq4
Похожие материалы по тегам
ea robofibo source v.11.2.mq4MetaTrader 4 · 2 общих теговgeniusv101-ecn.mq4MetaTrader 4 · 2 общих теговmarket crusher ea guidlines.txtMQL · 2 общих тегов2 to 1 strategy with signals.txtTradingView · 2 общих теговfresh algo signals & overlays v25_6334471093901859175.txtTradingView · 2 общих теговfresh algo v24 tradingview indicator_5918156155804195406.txtTradingView · 2 общих тегов
Вы автор или правообладатель?
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «ma_angle_eav3.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
Поиск по коду файла
#include <stdlib.mqh>
#define UP 1
#define DOWN 2
#define LONG 1
#define SHORT -1
#define FLAT 0
#define SMA 0
#define EMA 1
#define SMMA 2
#define LWMA 3
#define LSMA 4
extern bool Debug = false; // Change to true to allow print
extern int MA_Period=34;
extern string m = "--Moving Average Types--";
extern string m0 = " 0 = SMA";
extern string m1 = " 1 = EMA";
extern string m2 = " 2 = SMMA";
extern string m3 = " 3 = LWMA";
extern string m4 = " 4 = LSMA";
extern int MA_Type = 1;
extern string p = "--Applied Price Types--";
extern string p0 = " 0 = close";
extern string p1 = " 1 = open";
extern string p2 = " 2 = high";
extern string p3 = " 3 = low";
extern string p4 = " 4 = median(high+low)/2";
extern string p5 = " 5 = typical(high+low+close)/3";
extern string p6 = " 6 = weighted(high+low+close+close)/4";
extern int MA_AppliedPrice = 0;
extern double EntryAngle_Threshold=10; // What size angle to trigger a trade
extern double ExitAngle_Threshold=2;
extern int PrevMAShift=3;
extern int CurMAShift=1;
extern string mm = "---Money Management---";
extern double Lots=0.1;
extern double MaxLot = 30;
extern bool UseMoneyManagement = true; // Change to false to shutdown money management controls.
extern bool BrokerIsIBFX = false;
extern string mm1="Set mini and micro to false for standard account";
extern bool AccountIsMini = true;
extern bool AccountIsMicro = false;
extern double TradeSizePercent = 1; // Change to whatever percent of equity you wish to risk.
extern bool BrokerPermitsFractionalLots = true;
extern double StopLoss = 0; // Maximum pips willing to lose per position.
extern int TakeProfit = 0;
extern int Slippage = 3; // Possible fix for not getting filled or closed
extern string tsp = "--Trailing Stop Types--";
extern string tsp0 = " 0 = None";
extern string tsp1 = " 1 = Trail immediately";
extern string tsp2 = " 2 = Wait to trail";
extern string tsp3 = " 3 = Uses 3 levels before trail";
extern string tsp4 = " 4 = Breakeven + Lockin";
extern int TrailingStopType = 4;
extern string ts2 = "Settings for Type 2";
extern double TrailingStop = 15; // Change to whatever number of pips you wish to trail your position with.
extern string ts3 = "Settings for Type 3";
extern double FirstMove = 20; // Type 3 first level pip gain
extern double FirstStopLoss = 50; // Move Stop to Breakeven
extern double SecondMove = 30; // Type 3 second level pip gain
extern double SecondStopLoss = 30; // Move stop to lock is profit
extern double ThirdMove = 40; // type 3 third level pip gain
extern double TrailingStop3 = 20; // Move stop and trail from there
extern string ts4 = "Settings for Type 4";
extern double BreakEven = 30;
extern int LockInPips = 1; // Profit Lock in pips
int SignalCandle = 1;
extern string sm0="--Trading Hours Filter--";
extern string sm2="UseTradingHours - Enter 0 for false, 1 for true";
extern int UseTradingHours = 0;
extern string sm4="TradeAsian - Enter 0 for false, 1 for true";
extern int TradeAsianMarket = 1;
extern int AsianStart = 100; // Start trades after time
extern int AsianStop = 400; // Stop trading after time
extern string sm5="Trade Europe - Enter 0 for false, 1 for true";
extern int TradeEuropeanMarket = 1;
extern int EurStart = 1000; // Start trades after time
extern int EurStop = 1200; // Stop trading after time
extern string sm6="Trade NY - Enter 0 for false, 1 for true";
extern int TradeNewYorkMarket = 1;
extern int NYStart = 1600; // Start trades after time
extern int NYStop = 1800; // Stop trading after time
string setup;
double lotMM;
int TradesInThisSymbol;
int MagicNumber;
bool YesStop;
double myPoint, mFactor;
double MACurrent, MAPrevious;
int init()
{
// код доступен только после оплаты
}
int deinit()
{
return(0);
}
double fLSMA(int LSMAPeriod, int LSMAPrice,int shift)
{
double wt;
double ma1=iMA(NULL,0,LSMAPeriod,0,MODE_SMA ,LSMAPrice,shift);
double ma2=iMA(NULL,0,LSMAPeriod,0,MODE_LWMA,LSMAPrice,shift);
wt = MathFloor((3.0*ma2-2.0*ma1)/myPoint)*myPoint;
return(wt);
}
double Get_mFactor()
{
string Sym;
double Factor;
int ShiftDif;
Factor = 100000.0;
Sym = StringSubstr(Symbol(),3,3);
if (Sym == "JPY") Factor = 1000.0;
ShiftDif = PrevMAShift-CurMAShift;
Factor /= ShiftDif;
return (Factor);
}
void GetMAs (int TrendMethod, int MAPeriod, int Prev, int Cur)
{
switch (TrendMethod)
{
case LSMA : MACurrent=fLSMA(MAPeriod,MA_AppliedPrice,Cur);
MAPrevious=fLSMA(MAPeriod,MA_AppliedPrice,Prev);
break;
default : MACurrent=iMA(NULL,0,MAPeriod,0,MA_Type,MA_AppliedPrice,Cur);
MAPrevious=iMA(NULL,0,MAPeriod,0,MA_Type,MA_AppliedPrice,Prev);
}
}
bool CheckExitCondition(int cmd)
{
double maAngle;
GetMAs(MA_Type, MA_Period , PrevMAShift, CurMAShift);
maAngle = mFactor * (MACurrent - MAPrevious)/2.0;
switch (cmd)
{
case OP_BUY : if (maAngle < ExitAngle_Threshold) return(true);
break;
case OP_SELL : if (maAngle > -ExitAngle_Threshold) return(true);
}
return(false);
}
int GetSignal()
{
double maAngle;
GetMAs(MA_Type, MA_Period , PrevMAShift, CurMAShift);
maAngle = mFactor * (MACurrent - MAPrevious)/2.0;
if (maAngle > EntryAngle_Threshold) return(LONG);
if (maAngle < -EntryAngle_Threshold) return(SHORT);
return(FLAT);
}
bool NewBar()
{
static datetime dt = 0;
if (Time[0] != dt)
{
dt = Time[0];
return(true);
}
return(false);
}
int start()
{
// код доступен только после оплаты
}
void OpenBuyOrder()
{
int err,ticket, digits;
double TPprice,STprice;
ticket=OrderSend(Symbol(),OP_BUY,lotMM,Ask,Slippage,0,0,setup,MagicNumber,0,Green);
if (ticket > 0)
{
if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
{
if (Debug) Print("BUY order opened : ", OrderOpenPrice());
if (StopLoss != 0 || TakeProfit != 0)
{
TPprice = 0;
if (TakeProfit > 0) TPprice=TakeLong(OrderOpenPrice(), TakeProfit);
STprice = 0;
if (StopLoss > 0)
{
STprice=StopLong(OrderOpenPrice(), StopLoss);
STprice = ValidStopLoss(OP_BUY,Bid, STprice);
}
if (Digits > 0)
{
STprice = NormalizeDouble( STprice, Digits);
TPprice = NormalizeDouble( TPprice, Digits);
}
ModifyOrder(ticket, OrderOpenPrice(), STprice, TPprice, LightGreen);
}
}
}
else
{
err = GetLastError();
Print("Error opening BUY order [" + setup + "]: (" + err + ") " + ErrorDescription( err) );
}
}
void OpenSellOrder()
{
int err, ticket, digits;
double TPprice,STprice;
ticket=OrderSend(Symbol(),OP_SELL,lotMM,Bid,Slippage,0,0,setup,MagicNumber,0,Red);
if (ticket > 0)
{
if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
{
if (Debug) Print("SELL order opened : ", OrderOpenPrice());
if (StopLoss != 0 || TakeProfit != 0)
{
TPprice = 0;
if (TakeProfit > 0) TPprice=TakeShort(OrderOpenPrice(),TakeProfit);
STprice = 0;
if (StopLoss > 0)
{
STprice=StopShort(OrderOpenPrice() ,StopLoss);
STprice = ValidStopLoss(OP_SELL,Ask, STprice);
}
if (Digits > 0)
{
STprice = NormalizeDouble( STprice, Digits);
TPprice = NormalizeDouble( TPprice, Digits);
}
ModifyOrder(ticket, OrderOpenPrice(), STprice, TPprice, LightGreen);
}
}
}
else
{
err = GetLastError();
Print("Error opening Sell order [" + setup + "]: (" + err + ") " + ErrorDescription(err));
}
}
int CheckOpenPositions()
{
int cnt, total, NumPositions;
int NumBuyTrades, NumSellTrades; // Number of buy and sell trades in this symbol
NumBuyTrades = 0;
NumSellTrades = 0;
total=OrdersTotal();
for(cnt=0;cnt<total;cnt++)
{
OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES);
if ( OrderSymbol() != Symbol()) continue;
if ( OrderMagicNumber() != MagicNumber) continue;
if(OrderType() == OP_BUY ) NumBuyTrades++;
if(OrderType() == OP_SELL ) NumSellTrades++;
}
NumPositions = NumBuyTrades + NumSellTrades;
return (NumPositions);
}
int CloseOrder(int ticket,double numLots,int type)
{
int CloseCnt, err;
double close_price;
CloseCnt = 0;
while (CloseCnt < 3)
{
switch (type)
{
case OP_BUY : close_price = MarketInfo(Symbol(),MODE_BID);
break;
case OP_SELL : close_price = MarketInfo(Symbol(),MODE_ASK);
}
if (!OrderClose(ticket,numLots,close_price,Slippage,Violet))
{
err=GetLastError();
Print(CloseCnt," Error closing order : (", err , ") " + ErrorDescription(err));
if (err > 0) CloseCnt++;
}
else
{
CloseCnt = 3;
}
}
}
int ModifyOrder(int ord_ticket,double op, double price,double tp, color mColor)
{
int CloseCnt, err;
CloseCnt=0;
while (CloseCnt < 3)
{
if (OrderModify(ord_ticket,op,price,tp,0,mColor))
{
CloseCnt = 3;
}
else
{
err=GetLastError();
Print(CloseCnt," Error modifying order : (", err , ") " + ErrorDescription(err));
if (err>0) CloseCnt++;
}
}
}
int HandleTrailingStop(int type, int ticket, double op, double os, double tp)
{
switch (TrailingStopType)
{
case 1 : Immediate_TrailingStop (type, ticket, op, os, tp);
break;
case 2 : Delayed_TrailingStop (type, ticket, op, os, tp);
break;
case 3 : ThreeLevel_TrailingStop (type, ticket, op, os, tp);
break;
case 4 : BreakEven_TrailingStop (type, ticket, op, os, tp);
break;
break;
}
return(0);
}
void BreakEven_TrailingStop(int type, int ticket, double op, double os, double tp)
{
int digits;
double pBid, pAsk, BuyStop, SellStop;
digits = MarketInfo(Symbol(Показано первые 50% кода (символов: 16182)
Что вы получите после оплаты
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? Адрес передаётся вместе с заказом в магазин и сохраняется для связи заказа с оплатой. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.
Стоимость полного кода
1 618₽
≈ $19.02