WallStreet Forex Robot ver. 3.8.5 FINAL (Pirate Edition)
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «wall street + ozzy chiken leg 2012.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
WallStreet Forex Robot ver. 3.8.5 FINAL (Pirate Edition) — это торговый экспертный советник для платформы MetaTrader 4, работающий на таймфрейме M15. Советник ориентирован на торговлю валютными парами EURUSD, GBPUSD, USDCHF, USDJPY, USDCAD и использует комбинацию нескольких технических индикаторов для формирования торговых сигналов на открытие и закрытие позиций.
Советник поддерживает фиксированный и автоматический режимы управления позициями (AutoMM), а также режим восстановления (RecoveryMode) для пересчёта лотов после убытков. Доступны настройки стоп-лосса, тейк-профита, фильтрации спреда, волатильности и ограничения количества ордеров в баре. Торговые операции выполняются через стандартный API OrderSend с обработкой реквот.
Робот открывает позиции Buy и Sell на основе совокупных сигналов индикаторов MA, CCI, ATR и WPR, модифицирует ордера для фиксации промежуточной прибыли и закрывает позиции при достижении целевых уровней или лимитов убытков. Встроена система логирования с выводом информации на график и в журнал.
Настройки программы
| Настройка | Описание |
|---|---|
| Name | Название торгового советника. |
| Copy | Строка с информацией об авторских правах. |
| Op2 | Строковый параметр с описанием операции. |
| Symbol_Op | Символ и таймфрейм торговли, например EURUSD m15. |
| Op | Строковый параметр с описанием операции. |
| Date | Дата оптимизации настроек, отображается в комментариях на графике. |
| _TP | Строковый параметр с описанием настроек тейк-профита. |
| TakeProfit | Тейк-профит в пунктах для открытых позиций. |
| StopLoss | Стоп-лосс в пунктах для открытых позиций. |
| UseStopLevels | Использование уровней стоп-лосс и тейк-профит при открытии ордера. При FALSE стоп-лосс и тейк-профит не устанавливаются. |
| IsMarketExecution | Переключатель режима исполнения рыночного ордера (Market Execution). При включении стоп-лосс и тейк-профит устанавливаются после открытия ордера через OrderModify. |
| SecureProfit | Количество пунктов для фиксации промежуточной прибыли при модификации ордера. |
| SecureProfitTriger | Триггер в пунктах для активации фиксации промежуточной прибыли. |
| MaxLossPoints | Максимальные точки убытка для длинных и коротких позиций Buy и Sell, при превышении которых позиции закрываются. |
| _MM | Строковый параметр с описанием настроек управления денежными средствами. |
| RecoveryMode | Режим восстановления для автоматического пересчёта размера лота после убытков. При True используется функция CalcLots для расчёта лота. |
| FixedLot | Фиксированный размер лота при AutoMM = 0. |
| AutoMM | Автоматическое управление денежными средствами. При AutoMM > 0 лот рассчитывается автоматически на основе свободных средств. При RecoveryMode = FALSE лот рассчитывается напрямую, при RecoveryMode = TRUE используется функция CalcLots. |
| AutoMM_Max | Максимальное значение AutoMM для ограничения размера позиции. |
| MaxAnalizCount | Максимальное количество анализируемых исторических ордеров при RecoveryMode = True. |
| Risk | Процент риска для расчёта размера позиции при RecoveryMode = True. |
| MultiLotPercent | Процент множителя лота при расчёте в режиме RecoveryMode. |
| _Vola | Строковый параметр с описанием настроек фильтра волатильности. |
| VolaFilter | Фильтр волатильности. Ограничивает открытие позиций при низкой волатильности на основе разницы High-Low последних баров M15. |
| _Periods | Строковый параметр с описанием периодов индикаторов. |
| iMA_Period | Период индикатора скользящей средней (Moving Average) с методом SMMA. |
| iCCI_Period | Период индикатора CCI (Commodity Channel Index). |
| iATR_Period | Период индикатора ATR (Average True Range) для расчёта волатильности. |
| iWPR_Period | Период индикатора WPR (Williams Percent Range). |
| _Add_Op | Строковый параметр с дополнительными описаниями операций. |
| _AddOpenFilters | Строковый параметр с дополнительными фильтрами открытия. |
| FilterATR | Фильтр ATR для открытия позиций Buy и Sell. Если значение iATR_Signal <= FilterATR * pp, сигнал отменяется. |
| iCCI_OpenFilter | Пороговое значение iCCI для фильтрации сигналов открытия Buy и Sell. Для JPY-паров рекомендуется другое значение. |
| _OpenOrderFilters | Строковый параметр с дополнительными фильтрами открытия ордеров. |
| iMA_Filter_Open_a | Первый пороговый параметр фильтра MA для открытия позиций Buy и Sell. |
| iMA_Filter_Open_b | Второй пороговый параметр фильтра MA для открытия позиций Buy и Sell. |
| iWPR_Filter_Open_a | Первый пороговый параметр WPR для фильтрации сигналов открытия Buy и Sell. |
| iWPR_Filter_Open_b | Второй пороговый параметр WPR для фильтрации сигналов открытия Buy и Sell. |
| _CloseOrderFilters | Строковый параметр с дополнительными фильтрами закрытия. |
| Price_Filter_Close | Ценовой фильтр для закрытия позиций Buy и Sell. |
| iWPR_Filter_Close | Пороговое значение WPR для фильтрации сигналов закрытия позиций. |
| _Add | Строковый параметр с дополнительными настройками. |
| LongTrade | Разрешает открытие длинных (Buy) позиций. При False длинные позиции не открываются. |
| ShortTrade | Разрешает открытие коротких (Sell) позиций. При False короткие позиции не открываются. |
| No_Hedge_Trades | Запрет хеджевых сделок. При True нельзя одновременно иметь открытые позиции Buy и Sell. При True запрещается открытие противоположного направления. |
| OneOrderInBarMode | При True разрешается только один ордер в баре (1 ордер на 1 свечу). При False — ограничение не применяется. |
| MagicNumber | Магический номер для идентификации ордеров, управляемых советником. |
| MaxSpread | Максимально допустимый спред для открытия позиций. При превышении открытие блокируется. |
| OpenSlippage | Допустимое проскальзывание при открытии позиций. |
| CloseSlippage | Допустимое проскальзывание при закрытии позиций. |
| RequoteAttempts | Количество попыток повторного отправки ордера при реквотировании. |
| WriteLog | Запись основных информационных сообщений в журнал. |
| WriteDebugLog | Запись подробных отладочных сообщений в журнал для диагностики работы советника. |
| PrintLogOnChart | Вывод информационных сообщений на график в виде комментариев. |
Поиск по коду файла
extern string Name = "WallStreet Forex Robot ver. 3.8.5 FINAL (Pirate Edition)";
extern string Copy = "Copyright ? HELLTEAM^Pirat";
extern string Op2 = "??????????? ??? ????";
extern string Symbol_Op = "EURUSD m15";
extern string Op = "???? ???????????";
extern datetime Date = D'12.05.2011'; //--- ?????? ????? ??? ????, ????? ?????? ?? ????? ???? ??????????? (???? ?????????? ???????)
extern string _TP = "???????? ??????? ?????????";
extern int TakeProfit = 15; //--- (10 2 60)
extern int StopLoss = 120; //--- (100 10 200)
extern bool UseStopLevels = TRUE; //--- ????????? ???????? ???????. ???? ?????????, ?? ???????? ?????? ??????????? ????? ? ?????.
extern bool IsMarketExecution = true; //--- ????????? ????????? ?????????? ???????? ??????? (??????? ?????????, ????? ????????????)
extern int SecureProfit = 1; //--- (0 1 5) ????? ? ?????????
extern int SecureProfitTriger =-7; //--- (10 2 30)
extern int MaxLossPoints = 0; //--- (-200 5 -20) ???????????? ???????? ??? ???????? ??????? Buy ? Sell ??? ????????? ??????? (??? ???????? ?????? ?? - MaxLossPoints ??? ?????? (???????? ??????? 0), ????? ?????????)
extern string _MM = "????????? MM";
extern bool RecoveryMode = true; //--- ????????? ?????? ?????????????? ???????? (?????????? ???? ???? ???????? ????-????)
extern double FixedLot = 0.1; //--- ????????????? ????? ????
extern double AutoMM = 20.0; //--- ?? ?????????? ???? AutoMM > 0. ??????? ?????. ??? RecoveryMode = FALSE, ?????? ????? ?????? ??? ????????.
extern double AutoMM_Max = 30.0; //--- ???????????? ????
extern int MaxAnalizCount = 50; //--- ????? ???????? ????? ??????? ??? ???????(???????????? ??? RecoveryMode = True)
extern double Risk = 45.0; //--- ???? ?? ???????? (???????????? ??? RecoveryMode = True)
extern double MultiLotPercent = 1.1; //--- ??????????? ????????? ???? (???????????? ??? RecoveryMode = True)
extern string _Vola = "?????? ?????????????";
extern int VolaFilter = 23; //--- (15 1 30)
extern string _Periods = "??????? ???????????";
extern int iMA_Period = 75; //--- (60 5 100)
extern int iCCI_Period = 18; //--- (10 2 30)
extern int iATR_Period = 14; //--- (10 2 30) (!) ????? ?? ??????
extern int iWPR_Period = 11; //--- (10 1 20)
extern string _Add_Op = "??????????? ????????? ???????????";
extern string _AddOpenFilters = "---";
extern int FilterATR = 6; //--- (0 1 10) ???????? ?? ???? ?? ATR ??? Buy ? Sell (if (iATR_Signal <= FilterATR * pp) return (0);) (!) ????? ?? ??????
extern double iCCI_OpenFilter = 150; //--- (100 10 400) ?????? ?? iCCI ??? Buy ? Sell. ??? ??????????? ??? JPY ???????????? ?????? ?? ??????? (100 50 4000)
extern string _OpenOrderFilters = "---";
extern int iMA_Filter_Open_a = 15; //--- (4 2 20) ?????? ?? ??? ???????? Buy ? Sell (?????)
extern int iMA_Filter_Open_b = 39; //--- (14 2 50) ?????? ?? ??? ???????? Buy ? Sell (?????)
extern int iWPR_Filter_Open_a = -99; //--- (-100 1 0) ?????? WPR ??? ???????? Buy ? Sell
extern int iWPR_Filter_Open_b = -95; //--- (-100 1 0) ?????? WPR ??? ???????? Buy ? Sell
extern string _CloseOrderFilters = "---";
extern int Price_Filter_Close = 14; //--- (10 2 20) ?????? ???? ???????? ??? ???????? Buy ? Sell (?????)
extern int iWPR_Filter_Close = -19; //--- (0 1 -100) ?????? WPR ??? ???????? Buy ? Sell
extern string _Add = "??????????? ?????????";
extern bool LongTrade = TRUE; //--- ??????????? ??????? ???????
extern bool ShortTrade = TRUE; //--- ??????????? ???????? ???????
extern bool No_Hedge_Trades = false; //--- ????????????? ???????? ?????? Buy ? ?????? Sell ??????. ??? True ?? ?????????.
extern bool OneOrderInBarMode = TRUE; //--- ??? True ???????? ????? ????????? ?????? 1 ????? ? 1 ?????. (? ?????? ?????? ?? ????? ??? 1 ??? ? 15 ?????). ? ??????? ?? ????????, ??? ??? ????????? ??? ? 10 ???.
extern int MagicNumber = 777;
extern double MaxSpread = 4;
extern double OpenSlippage = 3; //--- ??????????????? ??? ???????? ??????
extern double CloseSlippage = 5; //--- ??????????????? ??? ???????? ??????
extern int RequoteAttempts = 5; //--- ???????????? ????? ?????????? ??? ????????/???????? ?????? ??? ???????? ? ?????? ???????
extern bool WriteLog = TRUE; //--- //--- ????????? ??????????? ???? ? ?????????.
extern bool WriteDebugLog = TRUE; //--- ????????? ??????????? ???? ?? ??????? ? ?????????.
extern bool PrintLogOnChart = TRUE; //--- ????????? ???????????? ?? ??????? (??? ???????????? ??????????? ?????????????)
double pp;
int pd;
double cf;
string EASymbol; //--- ??????? ??????
int SP;
int CloseSP;
int MaximumTrades = 1;
double NDMaxSpread; //--- ???????????? ????? ????? ???????
bool CheckSpreadRuleBuy; //--- ??????? ??? ???????? ?????? ????? ????????? (????????????? ???????????? ????????? ? ??????????? ??????)
bool CheckSpreadRuleSell;
string OpenOrderComment = "WSFR v3.8.5 FINAL";
int RandomOpenTimePercent = 0; //--- ???????????? ??? ??????? ?????? ??????? ?????????, ??????????? ????????? ?????. ?????????? ? ????????.
double MinLot = 0.01;
double MaxLot = 0.01;
double LotStep = 0.01;
int LotValue = 100000;
double FreeMargin = 1000.0;
double LotPrice = 1;
double LotSize;
int iWPR_Filter_OpenLong_a;
int iWPR_Filter_OpenLong_b;
int iWPR_Filter_OpenShort_a;
int iWPR_Filter_OpenShort_b;
int iWPR_Filter_CloseLong;
int iWPR_Filter_CloseShort;
color OpenBuyColor = Blue;
color OpenSellColor = Red;
color CloseBuyColor = DodgerBlue;
color CloseSellColor = DeepPink;
void init() {
// код доступен только после оплаты
}
int deinit() {
if (ObjectFind("BKGR") >= 0) ObjectDelete("BKGR");
if (ObjectFind("BKGR2") >= 0) ObjectDelete("BKGR2");
if (ObjectFind("BKGR3") >= 0) ObjectDelete("BKGR3");
if (ObjectFind("BKGR4") >= 0) ObjectDelete("BKGR4");
if (ObjectFind("LV") >= 0) ObjectDelete("LV");
return (0);
}
int start() {
// код доступен только после оплаты
}
void Scalper() {
bool OpenBuyRule = TRUE;
bool OpenSellRule = TRUE;
if (No_Hedge_Trades == TRUE && CheckOpenTrade(OP_SELL)) OpenBuyRule = FALSE;
if (No_Hedge_Trades == TRUE && CheckOpenTrade(OP_BUY)) OpenSellRule = FALSE;
if (OpenLongSignal() && !CheckOpenTrade(OP_BUY) && OpenBuyRule && OneOrderInBar(OP_BUY) && LongTrade) {
if (MaxSpreadFilter()) {
if (!CheckSpreadRuleBuy && WriteDebugLog) {
Print("???????? ?????? ?? ??????? ???????? ??-?? ???????? ??????.");
Print("??????? ????? = ", DoubleToStr((Ask - Bid) / pp, 1), ", MaxSpread = ", DoubleToStr(MaxSpread, 1));
Print("??????? WSFR 3.8.5 ????? ????????? ?????, ????? ????? ?????? ??????????.");
}
CheckSpreadRuleBuy = TRUE;
} else {
CheckSpreadRuleBuy = FALSE;
if (CheckVolatility())
{
Print("????????????? ?????????, ??? ???????????? ?????????? ???????? ??????");
}else
{
OpenPosition(OP_BUY);
}
}
}//--- ???????? if (OpenLongSignal()
if (OpenShortSignal()&& !CheckOpenTrade(OP_SELL) && OpenSellRule && OneOrderInBar(OP_SELL) && ShortTrade) {
if (MaxSpreadFilter()) {
if (!CheckSpreadRuleSell && WriteDebugLog) {
Print("???????? ?????? ?? ??????? ???????? ??-?? ???????? ??????.");
Print("??????? ????? = ", DoubleToStr((Ask - Bid) / pp, 1), ", MaxSpread = ", DoubleToStr(MaxSpread, 1));
Print("??????? WSFR 3.8.5 ????? ????????? ?????, ????? ????? ?????? ??????????.");
}
CheckSpreadRuleSell = TRUE;
} else {
CheckSpreadRuleSell = FALSE;
if (CheckVolatility())
{
Print("????????????? ?????????, ??? ???????????? ?????????? ???????? ??????");
}else
{
OpenPosition(OP_SELL);
}
}
} //--- ???????? if (OpenShortSignal()
}
bool CheckVolatility() {
double HeightFilter_a = NormalizeDouble(VolaFilter * pp, pd);
bool restrict = false;
if (NormalizeDouble(iHigh(NULL, PERIOD_M15, 1) - iLow(NULL, PERIOD_M15, 1), pd) > HeightFilter_a) restrict = true;
if (NormalizeDouble(iHigh(NULL, PERIOD_M15, 2) - iLow(NULL, PERIOD_M15, 2), pd) > HeightFilter_a) restrict = true;
return (restrict);
}
int OpenPosition(int OpType) {
int RandomOpenTime; //--- ???????? ?? ??????? ?? ????????
color OpenColor; //--- ???? ???????? ???????. ???? Buy ?? ???????, ???? Sell ?? ???????
int OpenOrder = 0; //--- ???????? ???????
int OpenOrderError; //--- ?????? ????????
string OpTypeString; //--- ?????????????? ???? ??????? ? ????????? ????????
double OpenPrice; //--- ???? ????????
int maxtry = RequoteAttempts;
int lasterror = 0;
double price = 0;
double TP, SL;
double OrderTP = NormalizeDouble (TakeProfit * pp , pd); //--- ??????????? ????-?????? ? ??? Points
double OrderSL = NormalizeDouble (StopLoss * pp , pd); //--- ??????????? ????-???? ? ??? Points
if (RandomOpenTimePercent > 0) {
MathSrand(TimeLocal());
RandomOpenTime = MathRand() % RandomOpenTimePercent;
if (WriteLog) {
Print("DelayRandomiser: ???????? ", RandomOpenTime, " ??????.");
}
Sleep(1000 * RandomOpenTime);
} //--- ???????? if (RandomOpenTimePerc
double OpenLotSize = LotSize; //--- ?????? ?????? ???????
if (AccountFreeMarginCheck(EASymbol, OpType, OpenLotSize) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) {
if (WriteDebugLog) {
Print("??? ???????? ?????? ???????????? ????????? ?????.");
Comment("??? ???????? ?????? ???????????? ????????? ?????.");
}
return (-1);
} //--- ???????? if (AccountFreeMarginCheck
RefreshRates();
if (OpType == OP_BUY) {
OpenPrice = NormalizeDouble(Ask, Digits);
OpenColor = OpenBuyColor;
if (UseStopLevels) { //--- ???? ???????? ????-?????? (????-???? ? ????-??????)
TP = NormalizeDouble(OpenPrice + OrderTP, Digits); //--- ?? ??????????? ????-??????
SL = NormalizeDouble(OpenPrice - OrderSL, Digits); //--- ? ????-????
} else {TP = 0; SL = 0;}
} else {
OpenPrice = NormalizeDouble(Bid, Digits);
OpenColor = OpenSellColor;
if (UseStopLevels) {
TP = NormalizeDouble(OpenPrice - OrderTP, Digits);
SL = NormalizeDouble(OpenPrice + OrderSL, Digits);
}
else {TP = 0; SL = 0;}
}
if (IsMarketExecution && UseStopLevels)
{
OpenOrder = OrderSend(EASymbol, OpType, OpenLotSize, OpenPrice, SP, 0, 0, OpenOrderComment, MagicNumber, 0, OpenColor);
if (OpenOrder > 0)
{
OrderModify(OpenOrder,OrderOpenPrice(),SL,TP,0);
return(OpenOrder);
}
}
else
{
OpenOrder = OrderSend(EASymbol, OpType, OpenLotSize, OpenPrice, SP, SL, TP, OpenOrderComment, MagicNumber, 0, OpenColor);
if (OpenOrder > 0) return(OpenOrder);
}
if ((OpType != OP_BUY) && (OpType != OP_SELL)) return(OpenOrder);
if (OpenOrder < 0) { //--- ???? ????? ?? ????????, ??
OpenOrderError = GetLastError(); //--- ?????????? ??????
if (WriteDebugLog) {
if (OpType == OP_BUY) OpTypeString = "OP_BUY";
else OpTypeString = "OP_SELL";
Print("????????: OrderSend(", OpTypeString, ") ?????? = ", ErrorDescription(OpenOrderError)); //--- ??? ?????? ?? ???????
} //--- ???????? if (WriteDebugLog)
}
lasterror = GetLastError();
if ((OpenOrder < 0) && ((lasterror == 135) || (lasterror == 138) || (lasterror == 146)))
{
Print("Requote. Error" + lasterror + ". Ticket: " + OpenOrder);
}
else
{
return(OpenOrder);
}
price = OpenPrice;
for (int attempt = 1; attempt <= maxtry; attempt++)
{
RefreshRates();
if (OpType == OP_BUY)
{
if (Ask <= price)
{
if (IsMarketExecution && UseStopLevels)
{
OpenOrder = OrderSend(EASymbol, OpType, OpenLotSize, NormalizeDouble(Ask,Digits), SP, 0, 0, OpenOrderComment, MagicNumber, 0, OpenColor);
if (OpenOrder > 0)
{
OrderModify(OpenOrder,OrderOpenPrice(),SL,TP,0);
return(OpenOrder);
}
}
else
{
OpenOrder = OrderSend(EASymbol, OpType, OpenLotSize, NormalizeDouble(Ask,Digits), SP, SL, TP, OpenOrderComment, MagicNumber, 0, OpenColor);
if (OpenOrder > 0) return(OpenOrder);
}
if ((GetLastError() != 135) && (GetLastError() != 138) && (GetLastError() != 146)) return(OpenOrder);
Print("Requote. " + "Attempt " + (attempt + 1));
continue;
}
}
if (OpType == OP_SELL)
{
if (Bid >= price)
{
if (IsMarketExecution && UseStopLevels)
{
OpenOrder = OrderSend(EASymbol, OpType, OpenLotSize, NormalizeDouble(Bid,Digits), SP, 0, 0, OpenOrderComment, MagicNumber, 0, OpenColor);
if (OpenOrder > 0)
{
OrderModify(OpenOrder,OrderOpenPrice(),SL,TP,0);
return(OpenOrder);
}
}
else
{
OpenOrder = OrderSend(EASymbol, OpType, OpenLotSize, NormalizeDouble(Bid,Digits), SP, SL, TP, OpenOrderComment, MagicNumber, 0, OpenColor);
if (OpenOrder > 0) return(OpenOrder);
}
if ((GetLastError() != 135) && (GetLastError() != 138) && (GetLastError() != 146)) return(OpenOrder);
Print("Requote. " + "Attempt " + (OpenOrder + 1));
}
}
}
return(-1);
}
void ModifyOrders() {
int total = OrdersTotal() - 1;
int ModifyError = GetLastError();
for (int i = total; i >= 0; i--) { //--- ??????? ???????? ???????
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (WriteDebugLog) Print("????????? ?????? ?? ????? ??????? ??????. ???????: ", ErrorDescription(ModifyError));
} else {
if (OrderType() == OP_BUY) {
if (OrderMagicNumber() == MagicNumber && OrderSymbol() == EASymbol) {
if (Bid - OrderOpenPrice() > SecureProfitTriger * pp && MathAbs(OrderOpenPrice() + SecureProfit * pp - OrderStopLoss()) >= Point && OrderOpenPrice()<OrderStopLoss()) {
ModifyOrder(EASymbol, OrderOpenPrice(), NormalizeDouble(OrderOpenPrice() + SecureProfit * pp, Digits), OrderTakeProfit(), Blue);
}
}
} //--- ???????? if (OrderType() == OP_BUY)
if (OrderType() == OP_SELL) {
if (OrderMagicNumber() == MagicNumber && OrderSymbol() == EASymbol) {
if (OrderOpenPrice() - Ask > SecureProfitTriger * pp && MathAbs(OrderOpenPrice() - SecureProfit * pp - OrderStopLoss()) >= Point && OrderOpenPrice()>OrderStopLoss()) {
ModifyOrder(EASymbol, OrderOpenPrice(), NormalizeDouble(OrderOpenPrice() - SecureProfit * pp, Digits), OrderTakeProfit(), Red);
}
}
} //--- ???????? if (OrderType() == OP_SELL)
}
} //--- ???????? for (int i = total - 1; i >= 0; i--)
}
void ModifyOrder(string sy="", double pp=-1, double sl=0, double tp=0, color cl=CLR_NONE) {
int ModifyTicketID = OrderTicket();
if (sy=="") sy=Symbol();
bool fm; //--- ??????????? ??????
double pAsk=MarketInfo(sy, MODE_ASK);
double pBid=MarketInfo(sy, MODE_BID);
int dg, err, it;
int PauseAfterError = 5; //--- ????? ? ???????? ????? ????????? ???????????
int NumberOfTry = 10; //--- ???-?? ??????? ??????????? ??? ????????????? ??????
if (pp<=0) pp=OrderOpenPrice();
if (sl<0) sl=OrderStopLoss();
if (tp<0) tp=OrderTakeProfit();
dg=MarketInfo(sy, MODE_DIGITS);
pp=NormalizeDouble(pp, dg);
sl=NormalizeDouble(sl, dg);
tp=NormalizeDouble(tp, dg);
if (pp!=OrderOpenPrice() || sl!=OrderStopLoss() || tp!=OrderTakeProfit()) {
for (it=1; it<=NumberOfTry; it++) {
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
fm=OrderModify(OrderTicket(), pp, sl, tp, 0, cl);
if (!fm) {
err=GetLastError();
if (WriteDebugLog) Print("????????? ?????? ?? ????? ??????????? ?????? (", GetNameOP(OrderType()), ",", ModifyTicketID, "). ???????: ", ErrorDescription(err),". ??????? ?",it);
Sleep(1000*PauseAfterError);
} //--- ???????? if (!fm) {
}
}
}
void CloseOrders() {
int total = OrdersTotal() - 1;
int SelectCloseError = GetLastError();
for (int i = total; i >= 0; i--) { //--- ??????? ???????? ???????
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (WriteDebugLog) Print("????????? ?????? ?? ????? ??????? ??????. ???????: ", ErrorDescription(SelectCloseError));
} else {
if (OrderType() == OP_BUY) {
if (OrderMagicNumber() == MagicNumber && OrderSymbol() == EASymbol) {
if (Bid >= OrderOpenPrice() + TakeProfit * pp || Bid <= OrderOpenPrice() - StopLoss * pp || CloseLongSignal(OrderOpenPrice(), ExistPosition())) {
CloseOrder(OrderTicket(),Bid);
}
}
} //--- ???????? if (OrderType() == OP_BUY)
if (OrderType() == OP_SELL) {
if (OrderMagicNumber() == MagicNumber && OrderSymbol() == EASymbol) {
if (Ask <= OrderOpenPrice() - TakeProfit * pp || Ask >= OrderOpenPrice() + StopLoss * pp || CloseShortSignal(OrderOpenPrice(), ExistPosition())) {
CloseOrder(OrderTicket(),Ask);
}
}
} //--- ???????? if (OrderType() == OP_SELL)
}
} //--- ???????? for (int i = total - 1; i >= 0; i--) {
}
int CloseOrder(int ticket, double prce) {
double price;
int slippage;
double p = prce;
int maxtry = RequoteAttempts;
color CloseColor;
OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
int ordtype = OrderType();
if (ordtype == OP_BUY) {price = NormalizeDouble(Bid,Digits); CloseColor = CloseBuyColor;}
if (ordtype == OP_SELL) {price = NormalizeDouble(Ask,Digits); CloseColor = CloseSellColor;}
if (MathAbs(OrderTakeProfit() - price) <= MarketInfo(Symbol(),MODE_FREEZELEVEL) * Point) return(0); //--- ???????? ??????? ????????? ????-???????
if (MathAbs(OrderStopLoss() - price) <= MarketInfo(Symbol(),MODE_FREEZELEVEL) * Point) return(0); //--- ???????? ??????? ????????? ????-?????
if (OrderClose(ticket,OrderLots(),price,CloseSlippage,CloseColor)) return(1); //--- ???? ????? ?????? ???????, ?? ?????????? 1)
if ((GetLastError() != 135) && (GetLastError() != 138) && (GetLastError() != 146)) return(0); //--- ???? ??? ?? 0
Print("Requote");
for (int attempt = 1; attempt <= maxtry; attempt++)
{
RefreshRates();
if (ordtype == OP_BUY)
{
slippage = MathRound((Bid - p) / pp);
if (Bid >= p)
{
Print("Closing order. Attempt " + (attempt + 1));
if (OrderClose(ticket,OrderLots(),NormalizeDouble(Bid,Digits),slippage,CloseColor)) return(1);
if (!((GetLastError() != 135) && (GetLastError() != 138) && (GetLastError() != 146))) contПоказано первые 50% кода (символов: 32435)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.