ZoneHedge_i EA
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «zonehedge_i ea @fxsignalspot.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
ZoneHedge_i EA — торговый советник для MetaTrader 4, использующий индикатор RSI для генерации сигналов на покупку и продажу. Советник отслеживает значения RSI на заданном таймфрейме и открывает позиции при достижении уровней перекупленности и перепроданности.
В советнике реализованы функции управления позициями: трейлинг-стоп, стоп по эквити, таймаут закрытия сделок, защита от просадки (drawdown) с ограничением количества ордеров и целевой прибыли. Поддерживается автоматическое управление лотом с риском в процентах от депозита.
Советник отображает на графике информацию о счёте (баланс, эквити, прибыль, плечо, свободные средства) и данные о спреде. Работает с ордерами через стандартные торговые API MetaTrader 4, идентифицируя свои позиции по магическому числу.
Входные параметры позволяют настраивать стратегию, таймфрейм, уровни RSI, параметры стопов и тейков, начальный лот, лимит одновременных сделок и режимы управления рисками.
Настройки программы
| Настройка | Описание |
|---|---|
| strategy | Стратегия — Выбор стратегии: strategy1 (ZoneHedge_i) — активная стратегия на основе RSI. |
| CHART_TIMEfRAME | Таймфрейм графика — Таймфрейм графика, на котором работает советник (по умолчанию M5). |
| settings | Настройки индикатора — Текстовый заголовок группы настроек индикатора. |
| RSI_PERIOD | Период RSI — Период расчёта индикатора RSI. |
| LoopBack | Количество баров проверки — Количество баров назад для проверки значений RSI при формировании сигнала. |
| RSI_PRICE | Тип цены для RSI — Тип цены для расчёта RSI (Close, Open, High, Low и др.). |
| RsiBuyLevel | Уровень покупки RSI — Уровень RSI, при достижении которого формируется сигнал на покупку (по умолчанию 30). |
| RsiSellLevel | Уровень продажи RSI — Уровень RSI, при достижении которого формируется сигнал на продажу (по умолчанию 70). |
| IndiCatorShift | Сдвиг индикатора — Сдвиг индикатора RSI при расчёте сигналов. |
| TrailTPLevels | Корректировка уровней трейлинга — Включает или отключает корректировку уровней стопа и тейка при движении цены. |
| DDR_ENABLED | Защита от просадки — Включает или отключает систему защиты от просадки с закрытием позиций при достижении целевой прибыли. |
| DDMaxOrders | Максимум ордеров для DD-защиты — Максимальное количество одновременных ордеров для срабатывания защиты от просадки. |
| DDProfitTarget | Целевая прибыль для DD-защиты — Целевая прибыль (в долларах) для срабатывания закрытия позиций при достижении лимита ордеров. |
| TFrame1 | Таймфрейм индикатора — Таймфрейм, на котором рассчитывается индикатор RSI для определения сигналов. |
| settings_end | Конец настроек индикатора — Текстовый маркер окончания группы настроек индикатора. |
| Stoploss | Стоп-лосс — Уровень стоп-лосса в пунктах для открытых позиций. |
| TrailStart | Начало трейлинга — Прибыль в пунктах, начиная с которой активируется трейлинг-стоп. |
| TrailStop | Расстояние трейлинга — Расстояние в пунктах от цены до стоп-лосса при трейлинг-стопе. |
| StartingLots | Начальный лот — Начальный размер лота для открытия первой позиции. |
| TakeProfit | Тейк-профит — Уровень тейк-профита в пунктах для открытых позиций. |
| Layer_Multiplier | Множитель лота — Множитель лота, определяющий коэффициент увеличения размера позиции (от x1 до x2). |
| PipStep | Шаг в пунктах — Шаг в пунктах для условия открытия дополнительных позиций по текущей цене. |
| MagicNumber | Магическое число — Магическое число для идентификации ордеров, открытых советником. |
| MaxTrades | Максимум одновременных сделок — Максимальное количество одновременных сделок в одном направлении. |
| Identifier | Идентификатор — Вариант идентификатора, определяющий множитель для наименования ордеров (от 1 до 4). |
| AutoMoneyManagement | Автоматическое управление лотом — Включает или отключает автоматический расчёт размера лота на основе процента риска от депозита. |
| PercentToRisk | Процент риска — Процент от депозита, используемый для расчёта размера лота при автоматическом управлении. |
| UseEquityStop | Стоп по эквити — Включает или отключает стоп по эквити — принудительное закрытие позиций при достижении лимита убытка. |
| TotalEquityRisk | Риск эквити — Процент эквити, при превышении убытка которого происходит принудительное закрытие всех позиций. |
| UseTrailingStop | Трейлинг-стоп — Включает или отключает функцию трейлинг-стопа для открытых позиций. |
| UseTimeOut | Таймаут — Включает или отключает таймаут — автоматическое закрытие всех позиций через заданное время. |
Поиск по коду файла
???//+------------------------------------------------------------------+
#property description ""
#property description "ZoneHedge_i EA"
#property description "+254733408173 "
#property version "2.00"
#property strict
#define EAName "ZoneHedge_i EA"
#define ENABLE_SPREAD_METER true
#define ENABLE_STATUS true
#define ENABLE_TEST_INDICATORS true
#define POINT_FORMAT_RULES "0.001=0.01,0.00001=0.0001,0.000001=0.0001" // this is deserialized in a special function later
bool FXD_DRAW_SPREAD_INFO = false;
bool FXD_CHART_IS_OFFLINE = false;
int FXD_TICKS_FROM_START = 0;
bool CalMain=false;
string NEA;
enum Strategy {strategy0=0/*select now*/,strategy1=1/*ZoneHedge_i*/};
input Strategy strategy = strategy1;
input ENUM_TIMEFRAMES CHART_TIMEfRAME = PERIOD_M5;
/***********************************************/
input string settings = "Indicator Settings";
extern int RSI_PERIOD=14;
extern int LoopBack = 2;
input ENUM_APPLIED_PRICE RSI_PRICE = PRICE_CLOSE;
extern double RsiBuyLevel= 30.0;/*RsiBuyLevel*/
extern double RsiSellLevel =70.0;/*RsiSellLevel*/
extern int IndiCatorShift = 2;
extern bool TrailTPLevels = false;
bool CLOSE_BY_OPP = false;/*Close Orders By Opposite Signal*/
extern bool DDR_ENABLED = true;
extern int DDMaxOrders = 5;
extern double DDProfitTarget = 0.35;
extern ENUM_TIMEFRAMES TFrame1 = PERIOD_H1; /*Indicator Timeframe*/
input string settings_end = "$Indicator Settings End";
static string symbl;
string Default = "Default set All Pair";
string Timeframe = "TimeFrame any";
string created = "j*******s*@aol.com";
enum M
{
a, //x2
b, //x1.9
c, //x1.8
d, //x1.7
e, //x1.6
f, //x1.5
g, //x1.4
h, //x1.3
i, //x1.2(Default)
j, //x1.1
k //x1
};
enum N
{
l, //1
m, //2
n, //3
o, //4
};
extern double Stoploss = 5000.0;
extern double TrailStart = 100.0;
extern double TrailStop = 100.0;
datetime objTime[];
extern double StartingLots = 0.01;
extern double TakeProfit = 58.0;
double Multiplier;
input M Layer_Multiplier = j;
extern double PipStep = 48.0;
bool AutoCompound = False;
extern int MagicNumber = 3491;
double slip = 30.0;
extern int MaxTrades = 50;
int identifier = 2;
input N Identifier = l;
extern bool AccountProfitTarget =false;
extern double AccountProfitValue =1000.0;
string MoneyManagement = "AutoLot";
extern bool AutoMoneyManagement = FALSE;
extern double PercentToRisk = 0.02;
double TahananModal = 10000.0;
extern bool UseEquityStop = FALSE;
extern double TotalEquityRisk = 20.0;
extern bool UseTrailingStop = FALSE;
extern bool UseTimeOut = FALSE;
double MaxTradeOpenHours = 48.0;
double PriceTargetBuy,PriceTargetSell, StartEquity, BuyTarget, SellTarget ;
double AveragePriceSell,AveragePriceBuy, SellLimit, BuyLimit ;
double LastBuyPrice, LastSellPrice, Spread;
bool flagbuy,flagsell;
datetime timeprev,ddBarCurrent;int expiration;
int NumOfTradesBuy = 0,NumOfTradesSell = 0;
double iLots;
int cnt = 0, totalbuy,totalsell;
double StopperBuy = 0.0,StopperSell = 0.0;
bool TradeNowBuy = FALSE,TradeNowSell = FALSE, LongTrade = FALSE, ShortTrade = FALSE;
int ticket;
bool NewOrdersPlacedBuy = FALSE,NewOrdersPlacedSell = FALSE;
double AccountEquityHighAmt, PrevEquity;
int myDigits;
string xend="Xend";
string d_exit = "DDExit";
string exB,exS;
static int masterAcc = 12345;
static int legalAcc = 10048141;
static int legalAcc2 = 1900032863;
static datetime legal= D' 2022.05.30.00:00';
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
GlobalVariableDel(exB);
GlobalVariableDel(exS);
kill();ResetLastError();
ObjectDelete("dbigx");ResetLastError();
Comment(" ");
if(ENABLE_STATUS)
DrawStatus("expert removed");
if(ENABLE_SPREAD_METER)
DrawSpreadInfo();
ResetLastError();
EventKillTimer();
return;
}
void OnTick()
{
// код доступен только после оплаты
}
void OnTimer()
{
if(CalMain==true)
{
MainFunc();
}
}
int MainFunc()
{
NEA = EAName;
if(NEA != EAName)
{
Comment(" \nEXPERT NAME WAS RENAMED/CHANGED! \nTRADE IS STOPED/NOT ALLOWED!");
Print("Trade STOPED! RENAMED NAME EA, WITHOUT PERMIT! update your license to owner...");
return (0);
}
/*CODE FOR
AUTHENTICATION*/
while(!IsStopped())
{
ResetLastError();
/**/
if(!IsTesting()){
FXD_TICKS_FROM_START++;
if(ENABLE_STATUS && FXD_TICKS_FROM_START == 1)
DrawStatus(StringConcatenate("on trade" +" St: " +strategy+ " "+ EAName));
if(FXD_DRAW_SPREAD_INFO)
DrawSpreadInfo();
}
ddBarCurrent=(datetime) SeriesInfoInteger(_Symbol,CHART_TIMEfRAME,SERIES_LASTBAR_DATE);
if(AccountProfitTarget &&
(MathCeil(AccountProfit())>=AccountProfitValue))
{
if(!GlobalVariableCheck(xend))
{
GlobalVariableSet(xend,0.01);
ResetLastError();
}
ResetLastError();
}
if(GlobalVariableCheck(xend))
{
while(OrdersTotal()>0)
{
CloseThisSymbolBuy();
CloseThisSymbolSell();
}
if(OrdersTotal()<1){
GlobalVariableDel(xend);ResetLastError();
}
}
/**/
displayAdaptor();
if(DDR_ENABLED){
bool Klsl=false; bool Klsf=false;
if((CountTrades(OP_BUY)>DDMaxOrders) && (DDMaxOrders>1) ){
if((LastProfit(OP_BUY)+FirstProfit(OP_BUY))>DDProfitTarget ){
Klsl=CloseByTicket(LastOrder(OP_BUY));
Klsf=CloseByTicket(FirstOrder(OP_BUY));
ResetLastError();
if(Klsf==true && Klsl==true){
NewOrdersPlacedBuy = TRUE;
Klsf=false;
Klsl=false;
}
}
}////
Klsl=false; Klsf=false;
if((CountTrades(OP_SELL)>DDMaxOrders) && (DDMaxOrders>1) ){
if((LastProfit(OP_SELL)+FirstProfit(OP_SELL))>DDProfitTarget ){
Klsl=CloseByTicket(LastOrder(OP_SELL));
Klsf=CloseByTicket(FirstOrder(OP_SELL));
ResetLastError();
if(Klsf==true && Klsl==true){
NewOrdersPlacedSell = TRUE;
Klsf=false;
Klsl=false;
}
}
}
}//DDR
if(TrailTPLevels){
trailTpSL();
}
double Lots = MarketInfo(Symbol(),MODE_MINLOT);
switch(Layer_Multiplier)
{
case a:
Multiplier = 2;
break;
case b:
Multiplier = 1.9;
break;
case c:
Multiplier = 1.8;
break;
case d:
Multiplier = 1.7;
break;
case e:
Multiplier = 1.6;
break;
case f:
Multiplier = 1.5;
break;
case g:
Multiplier = 1.4;
break;
case h:
Multiplier = 1.3;
break;
case i:
Multiplier = 1.2;
break;
case j:
Multiplier = 1.1;
break;
case k:
Multiplier = 1;
break;
}
switch(identifier)
{
case l:
identifier = 1;
break;
case m:
identifier = 2;
break;
case n:
identifier = 3;
break;
case o:
identifier = 4;
break;
}
double Ld_40 = PercentToRisk / TahananModal;
if(AutoCompound==true)
StartingLots = NormalizeDouble(AccountBalance() * Ld_40 / MarketInfo(Symbol(), MODE_TICKVALUE), 2);
double PrevCl;
double CurrCl;
if(UseTimeOut)
{
if(TimeCurrent() >= expiration)
{
CloseThisSymbolAll();
Print("Closed All due to TimeOut");
}
}
if(timeprev == ddBarCurrent)
return (0);
timeprev = ddBarCurrent;
double CurrentPairProfitBuy = CalculateProfit(OP_BUY);
double CurrentPairProfitSell = CalculateProfit(OP_SELL);
double CurrentPairProfit = CurrentPairProfitBuy+CurrentPairProfitSell;
if(UseEquityStop)
{
if(CurrentPairProfit < 0.0 && MathAbs(CurrentPairProfit) > TotalEquityRisk / 100.0 * AccountEquityHigh())
{
CloseThisSymbolAll();
Print("Closed All due to Stop Out");
NewOrdersPlacedBuy = FALSE;
NewOrdersPlacedSell = FALSE;
}
}
totalbuy = CountTrades(OP_BUY);
totalsell = CountTrades(OP_SELL);
if(totalbuy == 0)
flagbuy = FALSE;
if(totalsell == 0)
flagsell = FALSE;
for(cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber)
continue;
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if(OrderType() == OP_BUY)
{
LongTrade = TRUE;
ShortTrade = FALSE;//////////////////////////////////////////////////////////////////////////////////////
break;
}
}
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if(OrderType() == OP_SELL)
{
LongTrade = FALSE;///////////////////////////////////////////////////////////////////////////////////////////////
ShortTrade = TRUE;
break;
}
}
}
if( (totalbuy > 0 && totalbuy <= MaxTrades) )
{
RefreshRates();ResetLastError();
LastBuyPrice = FindLastBuyPrice();
if(LongTrade && LastBuyPrice - Ask >= PipStep * Point)
TradeNowBuy = TRUE;
}
if( (totalsell > 0 && totalsell <= MaxTrades))
{
RefreshRates();ResetLastError();
LastSellPrice = FindLastSellPrice();
if(ShortTrade && Bid - LastSellPrice >= PipStep * Point)
TradeNowSell = TRUE;
}
if(totalbuy < 1)
{
ShortTrade = FALSE;
LongTrade = FALSE;
TradeNowBuy = TRUE;
StartEquity = AccountEquity();
}
if(totalsell < 1)
{
ShortTrade = FALSE;
LongTrade = FALSE;
TradeNowSell = TRUE;
StartEquity = AccountEquity();
}////
if(TradeNowBuy || TradeNowSell)
{
LastBuyPrice = FindLastBuyPrice();
LastSellPrice = FindLastSellPrice();
if(ShortTrade)
{
NumOfTradesSell = totalsell;
iLots = NormalizeDouble(StartingLots * MathPow(Multiplier, NumOfTradesSell), identifier);
RefreshRates();
ticket = OpenPendingOrder(1, iLots, Bid, slip, Ask, 0, 0, EAName + "-" + NumOfTradesSell, MagicNumber, 0, clrHotPink);
if(ticket < 0)
{
Print("Error: ", GetLastError());
return (0);
}
LastSellPrice = FindLastSellPrice();
TradeNowSell = FALSE;
NewOrdersPlacedSell = TRUE;
}
else
{
if(LongTrade)
{
NumOfTradesBuy = totalbuy;
iLots = NormalizeDouble(StartingLots * MathPow(Multiplier, NumOfTradesBuy), identifier);
ticket = OpenPendingOrder(0, iLots, Ask, slip, Bid, 0, 0, EAName + "-" + NumOfTradesBuy, MagicNumber, 0, clrLime);
if(ticket < 0)
{
Print("Error: ", GetLastError());
return (0);
}
LastBuyPrice = FindLastBuyPrice();
TradeNowBuy = FALSE;
NewOrdersPlacedBuy = TRUE;
}
}
}
if((TradeNowBuy && totalbuy < 1) || (TradeNowSell && totalsell < 1) )
{
PrevCl = iClose(Symbol(), 0, 2);
CurrCl = iClose(Symbol(), 0, 1);
SellLimit = Bid;
BuyLimit = Ask;
if(!ShortTrade && !LongTrade)
{
NumOfTradesBuy = totalbuy;
NumOfTradesSell = totalsell;
if(PrevCl > CurrCl)
{
if(CheckEntrySignal()==1 || CheckEntrySignal()==2) //?????? >
{
iLots = NormalizeDouble(StartingLots * MathPow(Multiplier, NumOfTradesSell), identifier);
ticket = OpenPendingOrder(1, iLots, SellLimit, slip, SellLimit, 0, 0, EAName + "-" + NumOfTradesSell, MagicNumber, 0, clrHotPink);
if(ticket < 0)
{
Print("Error: ", GetLastError());ResetLastError();
return (0);
}
LastSellPrice = FindLastSellPrice();
NewOrdersPlacedSell = TRUE;
iLots = NormalizeDouble(StartingLots * MathPow(Multiplier, NumOfTradesBuy), identifier);
ticket = OpenPendingOrder(0, iLots, BuyLimit, slip, BuyLimit, 0, 0, EAName + "-" + NumOfTradesBuy, MagicNumber, 0, clrLime);
if(ticket < 0)
{
Print("Error: ", GetLastError());ResetLastError();
return (0);
}
LastBuyPrice = FindLastBuyPrice();
NewOrdersPlacedBuy = TRUE;
}
}
if(ticket > 0)
expiration = TimeCurrent() + 60.0 * (60.0 * MaxTradeOpenHours);
TradeNowBuy = FALSE;
TradeNowSell = FALSE;
}
}
totalbuy = CountTrades(OP_BUY);
totalsell = CountTrades(OP_SELL);
AveragePriceBuy = 0;
AveragePriceSell = 0;
double CountBuy = 0;
double CountSell = 0;
for(cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber)
continue;
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if(OrderType() == OP_BUY )
{
AveragePriceBuy += OrderOpenPrice() * OrderLots();
CountBuy += OrderLots();
}
}
}//for
for(cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber)
continue;
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if(OrderType() == OP_SELL )
{
AveragePriceSell += OrderOpenPrice() * OrderLots();
CountSell += OrderLots();
}
}
}//for
if(totalbuy > 0)
AveragePriceBuy = NormalizeDouble(AveragePriceBuy / CountBuy, Digits);
if(totalsell > 0)
AveragePriceSell = NormalizeDouble(AveragePriceSell / CountSell, Digits);
if(NewOrdersPlacedBuy || NewOrdersPlacedSell)
{
for(cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber)
continue;
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if(OrderType() == OP_BUY)
{
PriceTargetBuy = AveragePriceBuy + TakeProfit * Point;
BuyTarget = PriceTargetBuy;
StopperBuy = AveragePriceBuy - Stoploss * Point;
flagbuy = TRUE;
}
}
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if(OrderType() == OP_SELL)
{
PriceTargetSell = AveragePriceSell - TakeProfit * Point;
SellTarget = PriceTargetSell;
StopperSell = AveragePriceSell + Stoploss * Point;
flagsell = TRUE;
}
}
}
}
if(NewOrdersPlacedBuy || NewOrdersPlacedSell)
{
if(flagbuy == TRUE)
{
for(cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber)
continue;
if(OrderType()!=OP_BUY)
continue;
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
OrderModify(OrderTicket(), AveragePriceBuy, OrderStopLoss(), PriceTargetBuy, 0, clrYellow);
NewOrdersPlacedBuy = FALSE;
}
}//flagbuy
if(flagsell == TRUE)
{
for(cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber)
continue;
if(OrderType()!=OP_SELL)
continue;
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
OrderModify(OrderTicket(), AveragePriceSell, OrderStopLoss(), PriceTargetSell, 0, clrYellow);
NewOrdersPlacedSell = FALSE;
}
}//flagsell
}
Sleep(20);
}
return(0);
}
int CountTrades(ENUM_ORDER_TYPE OP)
{
int count = 0;
for(int trade = OrdersTotal() - 1; trade >= 0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber)
continue;
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
if(OrderType() == OP)
count++;
}
return (count);
}
void CloseThisSymbolAll()
{
for(int trade = OrdersTotal() - 1; trade >= 0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol())
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if(OrderType() == OP_BUY)
OrderClose(OrderTicket(), OrderLots(), Bid, slip, Blue);
if(OrderType() == OP_SELL)
OrderClose(OrderTicket(), OrderLots(), Ask, slip, Red);
}
Sleep(7000);
}
}
}
void CloseThisSymbolBuy()
{
for(int trade = OrdersTotal() - 1; trade >= 0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if(IsMyOrder())
{
if(OrderType() == OP_BUY)
{
OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), slip, Blue);
}
}
}
}
void CloseThisSymbolSell()
{
for(int trade = OrdersTotal() - 1; trade >= 0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if(IsMyOrder())
{
if(OrderType() == OP_SELL)
{
OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), slip, Red);
}
}
}
}
int OpenPendingOrder(int pType, double pLots, double pPrice, int pSlippage, double ad_24, int ai_32, int ai_36, string a_comment_40, int a_magic_48, int a_datetime_52, color a_color_56)
{
int l_ticket_60 = 0;
int l_error_64 = 0;
int l_count_68 = 0;
int li_72 = 100;
switch(pType)
{
case 2:
for(l_count_68 = 0; l_count_68 < li_72; l_count_68++)
{
l_ticket_60 = OrderSend(Symbol(), OP_BUYLIMIT, pLots, pPrice, pSlippage, StopLong(ad_24, ai_32), TakeLong(pPrice, ai_36), a_comment_40, a_magic_48, a_datetime_52, a_color_56);
l_error_64 = GetLastError();
if(l_error_64 == 0/* NO_ERROR */)
break;
if(!(l_error_64 == 4/* SERVER_BUSY */ || l_error_64 == 137/* BROKER_BUSY */ || l_error_64 == 146/* TRADE_CONTEXT_BUSY */ || l_error_64 == 136/* OFF_QUOTES */))
break;
Sleep(5000);
}
break;
case 4:
for(l_count_68 = 0; l_count_68 < li_72; l_count_68++)
{
l_ticket_60 = OrderSend(Symbol(), OP_BUYSTOP, pLots, pPrice, pSlippage, StopLong(ad_24, ai_32), TakeLong(pPrice, ai_36), a_comment_40, a_magic_48, a_datetime_52, a_color_56);
l_error_64 = GetLastError();
if(l_error_64 == 0/* NO_ERROR */)
break;
if(!(l_error_64 == 4/* SERVER_BUSY */ || l_error_64 == 137/* BROKER_BUSY */ || l_error_64 == 146/* TRADE_CONTEXT_BUSY */ || l_error_64 == 136/* OFF_QUOTES */))
break;
Sleep(5000);
}
break;
case 0:
for(l_count_68 = 0; l_count_68 < li_72; l_count_68++)
{
RefreshRates();
l_ticket_60 = OrderSend(Symbol(), OP_BUY, pLots, Ask, pSlippage, StopLong(Bid, ai_32), TakeLong(Ask, ai_36), a_comment_40, a_magic_48, a_datetime_52, a_color_56);
l_error_64 = GetLastError();
if(l_error_64 == 0/* NO_ERROR */)
break;
if(!(l_error_64 == 4/* SERVER_BUSY */ || l_error_64 == 137/* BROKER_BUSY */ || l_error_64 == 146/* TRADE_CONTEXT_BUSY */ || l_error_64 == 136/* OFF_QUOTES */))
break;
Sleep(5000);
}
break;
case 3:
for(l_count_68 = 0; l_count_68 < li_72; l_count_68++)
{
l_ticket_60 = OrderSend(Symbol(), OP_SELLLIMIT, pLots, pPrice, pSlippage, StopShort(ad_24, ai_32), TakeShort(pPrice, ai_36), a_comment_40, a_magic_48, a_datetime_52, a_color_56);
l_error_64 = GetLastError();
if(l_error_64 == 0/* NO_ERROR */)
break;
if(!(l_error_64 == 4/* SERVER_BUSY */ || l_error_64 == 137/* BROKER_BUSY */ || l_error_64 == 146/* TRADE_CONTEXT_BUSY */ || l_error_64 == 136/* OFF_QUOTES */))
break;
Sleep(5000);
}
break;
case 5:
for(l_count_68 = 0; l_count_68 < li_72; l_count_68++)
{
l_ticket_60 = OrderSend(Symbol(), OP_SELLSTOP, pLots, pPrice, pSlippage, StopShort(ad_24, ai_32), TakeShort(pPrice, ai_36), a_comment_40, a_magic_48, a_datetime_52, a_color_56);
l_error_64 = GetLastError();
if(l_error_64 == 0/* NO_ERROR */)
break;
if(!(l_error_64 == 4/* SERVER_BUSY */ || l_error_64 == 137/* BROKER_BUSY */ || l_error_64 == 146/* TRADE_CONTEXT_BUSY */ || l_error_64 == 136/* OFF_QUOTES */))
break;
Sleep(5000);
}
break;
case 1:
for(l_count_68 = 0; l_count_68 < li_72; l_count_68++)
{
l_ticket_60 = OrderSend(Symbol(), OP_SELL, pLots, Bid, pSlippage, StopShort(Ask, ai_32), TakeShort(Bid, ai_36), a_comment_40, a_magic_48, a_datetime_52, a_color_56);
l_error_64 = GetLastError();
if(l_error_64 == 0/* NO_ERROR */)
break;
if(!(l_error_64 == 4/* SERVER_BUSY */ || l_error_64 == 137/* BROKER_BUSY */ || l_error_64 == 146/* TRADE_CONTEXT_BUSY */ || l_error_64 == 136/* OFF_QUOTES */))
break;
Sleep(5000);
}
}
return (l_ticket_60);
}
double StopLong(double ad_0, int ai_8)
{
if(ai_8 == 0)
return (0);
else
return (ad_0 - ai_8 * Point);
}
double StopShort(double ad_0, int ai_8)
{
if(ai_8 == 0)
return (0);
else
return (ad_0 + ai_8 * Point);
}
double TakeLong(double ad_0, int ai_8)
{
if(ai_8 == 0)
return (0);
else
return (ad_0 + ai_8 * Point);
}
double TakeShort(double ad_0, int ai_8)
{
if(ai_8 == 0)
return (0);
else
return (ad_0 - ai_8 * Point);
}
double CalculateProfit(ENUM_ORDER_TYPE OP)
{
double ld_ret_0 = 0;
for(cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber)
continue;
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
if(OrderType() == OP)
ld_ret_0 += OrderProfit()+OrderSwap()+OrderCommission();
}
return (ld_ret_0);
}
void TrailingAlls(int pType, int ai_4, double a_price_8)
{
int l_ticket_16;
double l_ord_stoploss_20;
double l_price_28;
if(ai_4 != 0)
{
for(int l_pos_36 = OrdersTotal() - 1; l_pos_36 >= 0; l_pos_36--)
{
if(OrderSelect(l_pos_36, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber)
continue;
if(OrderSymbol() == Symbol() || OrderMagicNumber() == MagicNumber)
{
if(OrderType() == OP_BUY)
{
l_ticket_16 = NormalizeDouble((Bid - a_price_8) / Point, 0);
if(l_ticket_16 < pType)
continue;
l_ord_stoploss_20 = OrderStopLoss();
l_price_28 = Bid - ai_4 * Point;
if(l_ord_stoploss_20 == 0.0 || (l_ord_stoploss_20 != 0.0 && l_price_28 > l_ord_stoploss_20))
OrderModify(OrderTicket(), a_price_8, l_price_28, OrderTakeProfit(), 0, Aqua);
}
if(OrderType() == OP_SELL)
{
l_ticket_16 = NormalizeDouble((a_price_8 - Ask) / Point, 0);
if(l_ticket_16 < pType)
continue;
l_ord_stoploss_20 = OrderStopLoss();
l_price_28 = Ask + ai_4 * Point;
if(l_ord_stoploss_20 == 0.0 || (l_ord_stoploss_20 != 0.0 && l_price_28 < l_ord_stoploss_20))
OrderModify(OrderTicket(), a_price_8, l_price_28, OrderTakeProfit(), 0, Red);
}
}
Sleep(7000);
}
}
}
}
double AccountEquityHigh()
{
if(ChartPos() == 0)
AccountEquityHighAmt = AccountEquity();
if(AccountEquityHighAmt < PrevEquity)
AccountEquityHighAmt = PrevEquity;
else
AccountEquityHighAmt = AccountEquity();
PrevEquity = AccountEquity();
return (AccountEquityHighAmt);
}
double FindLastBuyPrice()
{
double l_ord_open_price_8;
int l_ticket_24;
double ld_unused_0 = 0;
int l_ticket_20 = 0;
for(int l_pos_16 = OrdersTotal() - 1; l_pos_16 >= 0; l_pos_16--)
{
OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber)
continue;
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_BUY)
{
l_ticket_24 = OrderTicket();
if(l_ticket_24 > l_ticket_20)
{
l_ord_open_price_8 = OrderOpenPrice();
ld_unused_0 = l_ord_open_price_8;
l_ticket_20 = l_ticket_24;
}
}
}
return (l_ord_open_price_8);
}
double FindLastSellPrice()
{
double l_ord_open_price_8;
int l_ticket_24;
double ld_unused_0 = 0;
int l_ticket_20 = 0;
for(int l_pos_16 = OrdersTotal() - 1; l_pos_16 >= 0; l_pos_16--)
{
OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber)
continue;
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_SELL)
{
l_ticket_24 = OrderTicket();
if(l_ticket_24 > l_ticket_20)
{
l_ord_open_price_8 = OrderOpenPrice();
ld_unused_0 = l_ord_open_price_8;
l_ticket_20 = l_ticket_24;
}
}
}
return (l_ord_open_price_8);
}
void Info()
{
Comment("",
"\n Copyright ? 2021, ",EAName,
"\n EA", EAName,":j*******s*@aol.com ",
"\n Equity = ", AccountEquity(),
"\n Starting Lot =", StartingLots
);
}
double ND(double val)
{
return(NormalizeDouble(val, myDigits));
}
double lotvol_buy()
{
double lotv=0;
for(int cnt = OrdersTotal(); cnt >=0; cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(!IsMyOrder())
continue;
if(IsMyOrder()&& OrderType()==OP_BUY)
lotv+=OrderLots();
}
return(lotv);
}
double lotvol_sell()
{
double lotv=0Показано первые 50% кода (символов: 43084)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.