Исходный код · ID 1575
ilan_mql5_trail.mq5
Вы автор или правообладатель?
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «ilan_mql5_trail.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
Поиск по коду файла
#property version "1.00"
input double TakeProfit = 10; // TakeProfit ? ???????
input double PipStep = 30; // ?????? ???? ???????? ?????
input double Lots = 0.10; // ????????? ????? ????
input int LotDecimal = 1; // ?????????? ?????? ????? ??????? ? ?????? ????
input double LotExponent = 1.70; // ?????????? ?????????? ?????? ????
input int MagicNumber = 70707; // ?????????? ????? ?????????
input int MaxTrades = 8; // ???????????? ?????????? ???????? ?????
input int Slip = 3; // ???????????????
input bool UseTrailingStop = false; // ???????????? TrailingStop
input int TrailStart = 10; // ??????? ? ???????, ??????????? ??? ?????? ?????
input int TrailStop = 10; // StopLoss ? ???????, ???????????? ??? ?????
/*input*/ bool UseEquityStop = false; // ???????????? ??????????? ?? ??????
/*input*/ double TotalEquityRisk = 50.0; // ???????????? ?????? ? ????????? ?? ????????
/*input*/ bool UseTimeOut = false; // ???????????? ??????????? ?? ????? ????? ???????
/*input*/ double MaxTradeOpenHours = 48; // ???????????? ????? ????? ??????? ? ?????
double Spread;
string ExpertName = "Ilan_mql5";
datetime Expiration;
double LotSize;
int i = 0, Total;
bool TradeNow = false, LongTrade = false, ShortTrade = false;
int Ticket = 0;
bool NewOrdersPlaced = false;
double LastBuyPrice, LastSellPrice;
double iTakeProfit, iPipStep;
int iTrailStart, iTrailStop;
long PositionID = 0; // ????????????? ???????? ???????
bool Position = false; // true - ???? ???????? ???????, false - ???
double OpenPrice; // ???? ???????? ???????
double OldOpenPrice = 0; // ????????? ???? ???????? ???????
MqlTick LastPrices; // ????????? ??? ????????? ????????? ??????? ??????
MqlTradeRequest Request; // ????????? ??? ???????? ?????? ???????? OrderSend()
MqlTradeResult Result; // ????????? ? ??????????? ???????? ???????? ??????
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
return;
}
void OnTick()
{
// код доступен только после оплаты
}
if (UseTrailingStop)
TrailPosition(iTrailStart, iTrailStop);
if (UseTimeOut && TimeCurrent() >= Expiration)
{
Print("????? ????? ??????? ???????, ?????????????? ???????? ???????");
ClosePosition(); // ????????? ???????
}
long TickVolume[1]; // ?????? ??? ???????? ?????? ?????????? ????
if (CopyTickVolume(_Symbol, _Period, 0, 1, TickVolume) != 1)
{
Print("?? ??????? ???????? ?????????? ????? ?? ??????? ????");
return;
}
if (TickVolume[0] > 1) return;
if (UseEquityStop)
{
double AccountEquity = AccountInfoDouble(ACCOUNT_EQUITY);
double AccountBalance = AccountInfoDouble(ACCOUNT_BALANCE);
if (AccountEquity <= AccountBalance * (1 - TotalEquityRisk / 100))
{
Print("???????? ", TotalEquityRisk, "% ????????, ?????????????? ???????? ???????");
ClosePosition();
}
}
if (!PositionSelect(_Symbol)) // ??? ????? ???????
{
Position = false;
}
else // ???? ???? ???????
{
Position = true;
PositionID = PositionGetInteger(POSITION_IDENTIFIER); // ????????????? ???????
}
if (Position) // ???? ???? ???????? ???????
{
if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) // ??????? Buy
{
LongTrade = true;
ShortTrade = false;
}
if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL) // ??????? Sell
{
LongTrade = false;
ShortTrade = true;
}
}
if (Position) Total = CountTrades(PositionID);
else Total = 0;
if (Position && (Total > 0 && Total <= MaxTrades))
{
LastBuyPrice = FindLastBuyPrice(PositionID);
LastSellPrice = FindLastSellPrice(PositionID);
if (SymbolInfoTick(_Symbol, LastPrices)) // ??????? ? LastPrices ????????? ????
{
if (LongTrade && LastBuyPrice - LastPrices.ask >= iPipStep * _Point) // ???? ???? ????
TradeNow = true;
if (ShortTrade && LastPrices.bid - LastSellPrice >= iPipStep * _Point) // ???? ???? ?????
TradeNow = true;
}
} // if (Total > 0 && Total <= MaxTrades)
if (!Position)
{
ShortTrade = false;
LongTrade = false;
TradeNow = true;
}
if (Position && TradeNow)
{
LotSize = NormalizeDouble(Lots * MathPow(LotExponent, Total), LotDecimal);
Request.action = TRADE_ACTION_DEAL; // ??????????? ?????????? ??????
Request.symbol = _Symbol; // ???????? ??????????
Request.volume = LotSize; // ????? ????
Request.sl = 0; // StopLoss
Request.tp = 0; // TakeProfit
Request.deviation = Slip; // ???????????????
Request.type_filling = ORDER_FILLING_AON; // ??? ?????? ?? ??????????
Request.magic = MagicNumber; // ?????????? ?????
if (!SymbolInfoTick(_Symbol, LastPrices))
{
Print("?? ??????? ???????? ????????? ??????? ??????");
return;
}
if (ShortTrade) // Sell - ?????
{
Request.price = ND(LastPrices.bid); // ???? ???????
Request.type = ORDER_TYPE_SELL; // ??? ??????
if (!OrderSend(Request, Result))
{
Print("?? ??????? ??????? ????? Sell, ??? ?????? ", Result.retcode);
return;
}
TradeNow = false;
NewOrdersPlaced = true; // ????? ????? ??????
}
else if (LongTrade) // Buy - ?????
{
Request.price = ND(LastPrices.ask); // ???? ???????
Request.type = ORDER_TYPE_BUY; // ??? ??????
if (!OrderSend(Request, Result))
{
Print("?? ??????? ??????? ?????, ??? ?????? ", Result.retcode);
return;
}
TradeNow = false;
NewOrdersPlaced = true; // ????? ????? ??????
}
} // if (TradeNow)
if (!Position && TradeNow) // ???? ??? ???????? ???????
{
MqlRates Rates[1];
if (CopyRates(_Symbol, _Period, 1, 1, Rates) != 1)
{
Print("?? ??????? ???????? ??????? ?????? ??? ?????????? ?????");
return;
}
if (!ShortTrade && !LongTrade)
{
LotSize = NormalizeDouble(Lots * MathPow(LotExponent, Total), LotDecimal);
Request.action = TRADE_ACTION_DEAL; // ??????????? ?????????? ??????
Request.symbol = _Symbol; // ???????? ??????????
Request.volume = LotSize; // ????? ????
Request.sl = 0; // StopLoss
Request.tp = 0; // TakeProfit
Request.deviation = Slip; // ???????????????
Request.type_filling = ORDER_FILLING_AON; // ??? ?????? ?? ??????????
Request.magic = MagicNumber; // ?????????? ?????
if (!SymbolInfoTick(_Symbol, LastPrices))
{
Print("?? ??????? ???????? ????????? ??????? ??????");
return;
}
if (Rates[0].open > Rates[0].close) // ???? ????????? ????? ?????? - ???????
{
Request.price = ND(LastPrices.bid); // ???? ???????
Request.type = ORDER_TYPE_SELL; // ??? ??????
if (!OrderSend(Request, Result))
{
Print("?? ??????? ??????? ?????, ??? ?????? ", Result.retcode);
return;
}
NewOrdersPlaced = true; // ????? ????? ??????
}
else // ???? ????????? ????? ????? - ????????
{
Request.price = ND(LastPrices.ask); // ???? ???????
Request.type = ORDER_TYPE_BUY; // ??? ??????
if (!OrderSend(Request, Result))
{
Print("?? ??????? ??????? ?????, ??? ?????? ", Result.retcode);
return;
}
NewOrdersPlaced = true; // ????? ????? ??????
}
} // if (!ShortTrade && !LongTrade)
if (NewOrdersPlaced)
Expiration = (datetime)(TimeCurrent() + PeriodSeconds(PERIOD_H1) * MaxTradeOpenHours);
TradeNow = false;
} // if (!Position && TradeNow)
if (NewOrdersPlaced)
{
if (!PositionSelect(_Symbol)) return; // ??? ????? ???????
double CurrStopLoss = PositionGetDouble(POSITION_SL); // StopLoss ???????
OpenPrice = PositiПоказано первые 50% кода (символов: 12799)
Что вы получите после оплаты
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? Адрес передаётся вместе с заказом в магазин и сохраняется для связи заказа с оплатой. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.
Стоимость полного кода: 1 280 ₽ (≈ $15.11 USDT)