WallStreetForexRobot v3.9
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «wallstreetforexrobot_v3.9.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
WallStreetForexRobot v3.9 — торговый советник для MetaTrader 4, написанный на языке MQL4. Советник использует внешние DLL-библиотеки (wininet.dll и WALLSTREET.dll) для установления интернет-соединения и управления торговой сессией, а также подключает модули PlusEasy, PlusSwiss и PlusLinex для расчёта лотов, управления линиями и защитой прибыли. Торговля ведётся на таймфрейме M15 с использованием индикаторов WPR, CCI, ATR и скользящей средней. Советник поддерживает автоматический расчёт лотов, трейлинг-стоп через SecureProfit, выход по пятницам, режим восстановления позиции и скрытый режим работы.
Настройки программы
| Настройка | Описание |
|---|---|
| s1 | Заголовок PlusEasy — Текстовый заголовок раздела настроек модуля PlusEasy. |
| EasyLot | Размер лота Easy — Базовый размер лота, используемый при открытии сделок через модуль PlusEasy. |
| s2 | Заголовок PlusSwiss — Текстовый заголовок раздела настроек модуля PlusSwiss. |
| s3 | Заголовок PlusLinex — Текстовый заголовок раздела настроек модуля PlusLinex. |
| s3_1 | Настройка Stop/Limit — Определяет тип ордера: 0 — Stop, 1 — Limit для входа в позицию. |
| LinexLimit | Лимит Linex — Целочисленный параметр, задающий направление смещения цены входа при расчёте уровня входа. |
| Magic | Магический номер — Уникальный идентификатор ордеров советника для их отслеживания и управления. |
| EA_Comment | Комментарий советника — Строка комментария, добавляемая к открываемым ордерам. |
| MaxSpread | Максимальный спред — Допустимый максимальный спред в пунктах; при превышении новые сделки не открываются. |
| Slippage | Допустимое проскальзывание — Максимально допустимое проскальзывание цены в пунктах при исполнении ордеров. |
| StealthMode | Скрытый режим — При включении советник не модифицирует стоп-лосс и тейк-профит открытых позиций. |
| CloseOnlyOnProfit | Закрытие только в прибыли — При включении советник закрывает позиции только при наличии положительной прибыли. |
| NFA | NFA-ограничение — При включении запрещает открытие новых позиций, если уже есть активные ордера советника. |
| No_Hedge | Запрет хеджирования — При включении запрещает открытие встречных позиций в противоположном направлении. |
| CS | Раздел пользовательских настроек — Текстовый заголовок раздела пользовательских настроек. |
| StopLoss | Стоп-лосс — Размер стоп-лосса в пунктах для новых позиций. |
| TakeProfit | Тейк-профит — Размер тейк-профита в пунктах для новых позиций. |
| SecureProfit | Защита прибыли — Расстояние в пунктах для перемещения стоп-лосса в прибыльную зону при срабатывании триггера. |
| SecureProfitTriger | Триггер защиты прибыли — Расстояние в пунктах от цены входа, при достижении которого активируется перемещение стоп-лосса. |
| UseCustomPair | Использовать пользовательскую пару — При включении советник берёт название пары из параметра UseSettingsFrom. |
| UseSettingsFrom | Источник настроек — Название валютной пары, для которой загружаются параметры сессии. |
| MM | Раздел управления рисками — Текстовый заголовок раздела настроек управления рисками. |
| RecoveryMode | Режим восстановления — При включении активируется специальный расчёт размера лота для восстановления позиции. |
| FixedLots | Фиксированный лот — Фиксированный размер лота при отключённом автоматическом расчёте. |
| AutoMM | Автоматический лот — Процент свободного маржи, используемый для автоматического расчёта размера лота. |
| AutoMM_Max | Максимальный автолот — Максимально допустимый размер автоматически рассчитанного лота. |
| FE | Раздел правил выхода в пятницу — Текстовый заголовок раздела настроек выхода в пятницу. |
| FridayExit | Выход в пятницу — При включении советник закрывает все позиции в указанный час в пятницу. |
| LastTradeHour | Последний час торговли — Последний час, в котором советник может открывать новые сделки в пятницу. |
| ExitHour | Час выхода — Час в пятницу, к которому советник закрывает все открытые позиции. |
Поиск по коду файла
#import "wininet.dll"
int InternetOpenA(string a0, int a1, string a2, string a3, int a4);
int InternetOpenUrlA(int a0, string a1, string a2, int a3, int a4, int a5);
int InternetCloseHandle(int a0);
#import "WALLSTREET.dll"
int SessionInit(int a0, int a1, int a2, int a3, string a4);
int SessionDeinit(int a0, int a1, int a2, int a3, string a4);
int ParamValue(int a0, int a1);
bool CheckCloseLong(int a0, double a1, double a2, double a3, double a4, double a5, double a6, double a7, double a8, double a9);
bool CheckCloseShort(int a0, double a1, double a2, double a3, double a4, double a5, double a6, double a7, double a8, double a9);
bool CheckOpenLong(int a0, double a1, double a2, double a3, double a4, double a5, double a6, double a7, double a8);
bool CheckOpenShort(int a0, double a1, double a2, double a3, double a4, double a5, double a6, double a7, double a8);
#import
extern string s1="-->PlusEasy Settings<--";
#include <pluseasy.mqh>
extern double EasyLot = 0.1;
extern string s2="-->PlusSwiss Settings<--";
#include <plusswiss.mqh>
extern string s3="-->PlusLinex Settings<--";
#include <pluslinex.mqh>
extern string s3_1=" Set Buy/Sell Stop=0 or Limit=1.";
extern int LinexLimit=0;
extern int Magic = 4698523;
extern int AccountNo = 961648;
extern string EA_Comment = "";
extern int MaxSpread = 4;
extern int Slippage = 2;
int OrRetry = 3;
int gi_100 = 3;
extern bool StealthMode = FALSE;
bool gi_108 = TRUE;
extern bool CloseOnlyOnProfit = FALSE;
extern bool NFA = FALSE;
extern bool No_Hedge = FALSE;
extern string CS = "==== Custom Settings ====";
extern int StopLoss = 0;
extern int TakeProfit = 0;
extern int SecureProfit = 0;
extern int SecureProfitTriger = 0;
extern bool UseCustomPair = FALSE;
extern string UseSettingsFrom = "EURUSD";
extern string MM = "==== Risk Management ====";
extern bool RecoveryMode = FALSE;
extern double FixedLots = 0.1;
extern double AutoMM = 0.0;
extern double AutoMM_Max = 20.0;
extern int MaxAccountTrades = 3;
extern string FE = "==== Friday Exit Rules ====";
extern bool FridayExit = FALSE;
extern int LastTradeHour = 19;
extern int ExitHour = 20;
int gi_220 = 50;
double gd_224 = 25.0;
double gd_232 = 1.1;
int MaPeriod = 0;
int gi_244 = 0;
int gi_248 = 0;
int gi_252 = 0;
int gi_256 = 0;
int gi_260 = 0;
int gi_264 = 0;
int WprPeriod = 0;
int gi_272 = 0;
int gi_276 = 0;
int gi_280 = 0;
int gi_284 = 0;
int AtrLevel = 0;
int AtrPeriod = 0;
int gi_296 = 0;
int CciPeriod = 0;
int gi_304 = 0;
int Hr = 0;
int SymbolType = -1;
string gs_316 = "";
bool gi_324 = TRUE;
bool gi_328 = FALSE;
int g_stoplevel_332 = 0;
double g_minlot_336 = 0.01;
double g_maxlot_344 = 0.01;
double g_lotstep_352 = 0.01;
int g_lotsize_360 = 100000;
double g_marginrequired_364 = 1000.0;
double Pt = 0.0001;
double gd_unused_380 = 0.1;
double gd_unused_388 = 1.0;
int CheckWWW() {
int li_20;
bool li_ret_0 = TRUE;
string ls_4 = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461)";
bool li_12 = FALSE;
int li_16 = InternetOpenA(ls_4, li_12, "0", "0", 0);
if (li_16 != 0) {
li_20 = InternetOpenUrlA(li_16, "", "0", 0, -2080374528, 0);
if (li_20 == 0) li_ret_0 = FALSE;
else InternetCloseHandle(li_20);
InternetCloseHandle(li_16);
} else li_ret_0 = FALSE;
return (li_ret_0);
}
void init() {
// код доступен только после оплаты
}
int deinit() {
Comment("");
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");
if (SymbolType != -1) SymbolType = MyDeinit();
return (0);
}
int start() {
// код доступен только после оплаты
}
double OrPrice;
double ld_16;
double ld_24;
color color_32;
double OrLot;
int OrTicket;
double price_156;
double price_164;
string ls_180;
string Cmt = "";
double ld_48 = 0;
double ld_56 = 0;
double ld_64 = 0;
double ld_72 = 1;
if (DayOfWeek() == 1 && iVolume(NULL, PERIOD_D1, 0) < 5.0) return (0);
if (StringLen(Symbol()) < 6) return (0);
if (gi_324) {
Comment("\nInitializing ...");
Sleep(100);
RefreshRates();
gi_324 = FALSE;
g_stoplevel_332 = MarketInfo(Symbol(), MODE_STOPLEVEL);
g_minlot_336 = MarketInfo(Symbol(), MODE_MINLOT);
g_maxlot_344 = MarketInfo(Symbol(), MODE_MAXLOT);
g_lotsize_360 = MarketInfo(Symbol(), MODE_LOTSIZE);
g_lotstep_352 = MarketInfo(Symbol(), MODE_LOTSTEP);
g_marginrequired_364 = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
if (Digits <= 3) Pt = 0.01;
else Pt = 0.0001;
if (Digits == 3 || Digits == 5) gd_unused_380 = 0.1;
else gd_unused_380 = 1;
Sleep(1000);
gi_328 = CheckWWW();
Sleep(1000);
if (!gi_328) gi_324 = TRUE;
}
if ((!IsTesting()) && IsStopped()) return (0);
if ((!IsTesting()) && !IsTradeAllowed()) return (0);
if ((!IsTesting()) && IsTradeContextBusy()) return (0);
if (IsDllsAllowed() == FALSE) {
Comment("\nWarning: Set Parameter **AllowDLL Imports** ON in menu Tools -> Options -> ExpertAdvisors.");
Print("Warning: Set Parameter **AllowDLL Imports** ON in menu Tools -> Options -> ExpertAdvisors.");
Alert("Warning: Set Parameter **AllowDLL Imports** ON in menu Tools -> Options -> ExpertAdvisors.");
Sleep(30000);
return (0);
}
if (SymbolType <= 0) {
if (!gi_328) {
Comment("\nInternet connection problem");
Alert("Internet connection problem");
Sleep(10000);
return (0);
}
Comment("\nUpdating settings ...");
SymbolType = MyFirstInit();
if (EasySL<=0) EasySL=StopLoss;
if (EasyTP<=0) EasyTP=TakeProfit;
if (SymbolType < 0) Comment("\nInitializing ...");
}
if (SymbolType <= 0) {
if (SymbolType == -8) {
Comment("\nUnsupported currency pair " + gs_316 + ", Bid: " + DoubleToStr(Bid, Digits) + ", Ask: " + DoubleToStr(Ask, Digits));
Alert("Unsupported currency pair " + gs_316 + ", Bid: " + DoubleToStr(Bid, Digits) + ", Ask: " + DoubleToStr(Ask, Digits));
} else {
Comment("\nInitialization is failed with error code " + DoubleToStr(SymbolType, 0));
Alert("Initialization is failed with error code " + DoubleToStr(SymbolType, 0));
}
Sleep(10000);
return (0);
}
if (MaPeriod <= 0 || WprPeriod <= 0 || AtrPeriod <= 0 || CciPeriod <= 0) {
Comment("\nWrong initialization parameters for pair " + Symbol());
Alert("Wrong initialization parameters for pair " + Symbol());
Sleep(10000);
return (0);
}
HideTestIndicators(TRUE);
double M15_Close1 = iClose(NULL, PERIOD_M15, 1);
double M15_Ma1 = iMA(NULL, PERIOD_M15, MaPeriod, 0, MODE_SMMA, PRICE_CLOSE, 1);
double M15_Wpr1 = iWPR(NULL, PERIOD_M15, WprPeriod, 1);
double M15_Atr1 = iATR(NULL, PERIOD_M15, AtrPeriod, 1);
double M15_Cci1 = iCCI(NULL, PERIOD_M15, CciPeriod, PRICE_TYPICAL, 1);
HideTestIndicators(FALSE);
double ld_120 = 0;
if (StringSubstr(AccountCurrency(), 0, 3) == "JPY") {
ld_120 = MarketInfo("USDJPY" + StringSubstr(Symbol(), 6), MODE_BID);
if (ld_120 > 0.1) ld_72 = ld_120;
else ld_72 = 84;
}
if (StringSubstr(AccountCurrency(), 0, 3) == "GBP") {
ld_120 = MarketInfo("GBPUSD" + StringSubstr(Symbol(), 6), MODE_BID);
if (ld_120 > 0.1) ld_72 = 1 / ld_120;
else ld_72 = 0.6211180124;
}
if (StringSubstr(AccountCurrency(), 0, 3) == "EUR") {
ld_120 = MarketInfo("EURUSD" + StringSubstr(Symbol(), 6), MODE_BID);
if (ld_120 > 0.1) ld_72 = 1 / ld_120;
else ld_72 = 0.7042253521;
}
if (AutoMM > 0.0 && (!RecoveryMode)) OrLot = MathMax(g_minlot_336, MathMin(g_maxlot_344, MathCeil(MathMin(AutoMM_Max, AutoMM) / ld_72 / 100.0 * AccountFreeMargin() / g_lotstep_352 / (g_lotsize_360 / 100)) * g_lotstep_352));
if (AutoMM > 0.0 && RecoveryMode) OrLot = CalcLots();
if (AutoMM == 0.0) OrLot = FixedLots;
Cmt = Cmt
+ "\n "
+ "\n "
+ "\n Authorization - OK!"
+ "\n -----------------------------------------------"
+ "\n SL = " + StopLoss + " pips / TP = " + TakeProfit + " pips"
+ "\n Spread = " + DoubleToStr((Ask - Bid) / Pt, 1) + " pips";
if (Ask - Bid > MaxSpread * Pt) Cmt = Cmt + " - TOO HIGH";
else Cmt = Cmt + " - NORMAL";
Cmt = Cmt
+ "\n -----------------------------------------------";
if (AutoMM > 0.0) {
Cmt = Cmt
+ "\n AutoMM - ENABLED"
+ "\n Risk = " + DoubleToStr(AutoMM, 1) + "%";
}
Cmt = Cmt
+ "\n Trading Lots = " + DoubleToStr(OrLot, 2);
Cmt = Cmt
+ "\n -----------------------------------------------";
if (RecoveryMode) {
Cmt = Cmt
+ "\n Recovery Mode - ENABLED";
} else {
Cmt = Cmt
+ "\n Recovery Mode - DISABLED";
}
if (StealthMode) {
Cmt = Cmt
+ "\n Stealth Mode - ENABLED";
} else {
Cmt = Cmt
+ "\n Stealth Mode - DISABLED";
}
Cmt = Cmt
+ "\n -----------------------------------------------";
Comment(Cmt);
if (ObjectFind("BKGR") < 0) {
ObjectCreate("BKGR", OBJ_LABEL, 0, 0, 0);
ObjectSetText("BKGR", "g", 110, "Webdings", LightSlateGray);
ObjectSet("BKGR", OBJPROP_CORNER, 0);
ObjectSet("BKGR", OBJPROP_BACK, TRUE);
ObjectSet("BKGR", OBJPROP_XDISTANCE, 5);
ObjectSet("BKGR", OBJPROP_YDISTANCE, 15);
}
if (ObjectFind("BKGR2") < 0) {
ObjectCreate("BKGR2", OBJ_LABEL, 0, 0, 0);
ObjectSetText("BKGR2", "g", 110, "Webdings", DimGray);
ObjectSet("BKGR2", OBJPROP_BACK, TRUE);
ObjectSet("BKGR2", OBJPROP_XDISTANCE, 5);
ObjectSet("BKGR2", OBJPROP_YDISTANCE, 60);
}
if (ObjectFind("BKGR3") < 0) {
ObjectCreate("BKGR3", OBJ_LABEL, 0, 0, 0);
ObjectSetText("BKGR3", "g", 110, "Webdings", DimGray);
ObjectSet("BKGR3", OBJPROP_CORNER, 0);
ObjectSet("BKGR3", OBJPROP_BACK, TRUE);
ObjectSet("BKGR3", OBJPROP_XDISTANCE, 5);
ObjectSet("BKGR3", OBJPROP_YDISTANCE, 45);
}
if (ObjectFind("LV") < 0) {
ObjectCreate("LV", OBJ_LABEL, 0, 0, 0);
ObjectSetText("LV", "WALL STREET ROBOT", 9, "Tahoma Bold", White);
ObjectSet("LV", OBJPROP_CORNER, 0);
ObjectSet("LV", OBJPROP_BACK, FALSE);
ObjectSet("LV", OBJPROP_XDISTANCE, 13);
ObjectSet("LV", OBJPROP_YDISTANCE, 23);
}
if (ObjectFind("BKGR4") < 0) {
ObjectCreate("BKGR4", OBJ_LABEL, 0, 0, 0);
ObjectSetText("BKGR4", "g", 110, "Webdings", DimGray);
ObjectSet("BKGR4", OBJPROP_CORNER, 0);
ObjectSet("BKGR4", OBJPROP_BACK, TRUE);
ObjectSet("BKGR4", OBJPROP_XDISTANCE, 5);
ObjectSet("BKGR4", OBJPROP_YDISTANCE, 84);
}
if (TakeProfit < g_stoplevel_332 * Point / Pt) TakeProfit = g_stoplevel_332 * Point / Pt;
if (StopLoss < g_stoplevel_332 * Point / Pt) StopLoss = g_stoplevel_332 * Point / Pt;
Slippage = Slippage * Pt;
int CountMyOpenedBuys = 0;
int CountMyOpenedSells = 0;
int CountOtherOpenedBuys = 0;
int CountOtherOpenedSells = 0;
if (CloseOnlyOnProfit) gi_264 = FALSE;
for (int pos_152 = OrdersTotal() - 1; pos_152 >= 0; pos_152--) {
if (!OrderSelect(pos_152, SELECT_BY_POS, MODE_TRADES)) Print("Error in OrderSelect! Position:", pos_152);
else {
if (OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {
if (OrderMagicNumber() != Magic) {
if (OrderType() == OP_BUY) CountOtherOpenedBuys++;
else CountOtherOpenedSells++;
}
if (OrderMagicNumber() == Magic) {
ld_64 += OrderProfit();
if (OrderType() == OP_BUY) ld_48 = (Bid - OrderOpenPrice()) / Pt;
else ld_48 = (OrderOpenPrice() - Ask) / Pt;
ld_56 += ld_48;
if (OrderType() == OP_BUY) {
CountMyOpenedBuys++;
if (OrderStopLoss() == 0.0 && StealthMode == FALSE) {
price_156 = NormalizeDouble(OrderOpenPrice() - StopLoss * Pt, Digits);
price_164 = NormalizeDouble(OrderOpenPrice() + TakeProfit * Pt, Digits);
OrderModify(OrderTicket(), OrderOpenPrice(), price_156, price_164, 0, Green);
continue;
}
if (Bid >= OrderOpenPrice() + TakeProfit * Pt || Bid <= OrderOpenPrice() - StopLoss * Pt || (CloseLong(OrderOpenPrice(), M15_Wpr1, M15_Close1, iOpen(NULL, PERIOD_M1,
1), iClose(NULL, PERIOD_M1, 1)) && TimeCurrent() - OrderOpenTime() > 180) || (FridayExit && DayOfWeek() == 5 && Hour() >= ExitHour && TimeCurrent() - OrderOpenTime() > 180)) {
for (int li_148 = 1; li_148 <= MathMax(1, OrRetry); li_148++) {
RefreshRates();
if (OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), Slippage, Violet)) {
CountMyOpenedBuys--;
break;
}
Sleep(MathMax(100, 1000 * gi_100));
}
Sleep(5000);
continue;
}
if (!(Bid - OrderOpenPrice() > SecureProfitTriger * Pt && MathAbs(OrderOpenPrice() + SecureProfit * Pt - OrderStopLoss()) >= Point)) continue;
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(OrderOpenPrice() + SecureProfit * Pt, Digits), OrderTakeProfit(), 0, Blue);
continue;
}
CountMyOpenedSells++;
if (OrderStopLoss() == 0.0 && StealthMode == FALSE) {
price_156 = NormalizeDouble(OrderOpenPrice() + StopLoss * Pt, Digits);
price_164 = NormalizeDouble(OrderOpenPrice() - TakeProfit * Pt, Digits);
OrderModify(OrderTicket(), OrderOpenPrice(), price_156, price_164, 0, Green);
continue;
}
if (Ask <= OrderOpenPrice() - TakeProfit * Pt || Ask >= OrderOpenPrice() + StopLoss * Pt || (CloseShort(OrderOpenPrice(), M15_Wpr1, M15_Close1, iOpen(NULL,
PERIOD_M1, 1Показано первые 50% кода (символов: 21361)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.