Ilan_16TD_CCI
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «ilan_16td_cci_1.3.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Ilan_16TD_CCI — торговый советник для MetaTrader 4, который анализирует ценовые данные с помощью индикатора CCI на двух таймфреймах и скользящей средней, а затем открывает отложенные ордера при совпадении сигналов. Советник поддерживает управление несколькими одновременными сделками с уникальным магическим номером, что позволяет вести параллельные позиции на одном символе.
В советнике реализованы функции трейлинг-стопа, защиты по балансу и таймаута сделок, а также динамическое изменение шага ордера в зависимости от количества открытых позиций. Отображается информационная панель с балансом и эквити, цвет которой меняется в зависимости от соотношения equity к балансу.
Размер лота рассчитывается по экспоненциальной формуле от количества активных сделок. Торговые операции выполняются через стандартный API OrderSend с обработкой ошибок и повторными попытками при занятости торгового контекста.
Настройки программы
| Настройка | Описание |
|---|---|
| t1 | Заголовок 1 — Заголовок группы настроек Turbo |
| ????? ????? (Turbo) | Turbo — При включении шаг ордера дробится на 1/3 или 2/3 в зависимости от количества открытых сделок |
| t2 | Заголовок 2 — Заголовок группы настроек Dynamic |
| ????? Dynamic (Dynamic) | Dynamic — Включает динамический расчёт шага ордера на основе диапазона цены за 36 баров при достижении определённого количества сделок |
| t3 | Подпись 3 — Подпись параметра StartDynamic |
| ?????, ? ???????? ???????? ???????? ????? Dynamic (StartDynamic) | Начало Dynamic — Количество сделок, после которого активируется динамический расчёт шага при включённом Dynamic |
| t4 | Подпись 4 — Подпись параметра NewCycle |
| ????? ?????? ??????????? ????? ??????? (NewCycle) | NewCycle — Включает режим открытия новых позиций по сигналам CCI при отсутствии текущих сделок |
| t5 | Заголовок 5 — Заголовок группы настроек скользящей средней |
| PerMA | Период СМА — Период скользящей средней |
| t6 | Заголовок 6 — Заголовок группы настроек CCI |
| ??????? CCI ??? ?????? (Drop1) | Порог CCI (таймфрейм 1) — Пороговое значение CCI для первого таймфрейма при открытии позиции |
| ??????? CCI ??? ?????? (Drop2) | Порог CCI (таймфрейм 2) — Пороговое значение CCI для второго таймфрейма при открытии позиции |
| t8 | Заголовок 8 — Заголовок группы настроек периодов CCI |
| ?????? CCI (Per1) | Период CCI 1 — Период расчёта CCI для первого таймфрейма |
| ?????? CCI (Per2) | Период CCI 2 — Период расчёта CCI для второго таймфрейма |
| ?????? ??????? ???? ?????? ????. ??? ??????? ???. ?? ?????? 6!!!!!!!!!!! (applied_price) | Применяемая цена — Тип цены для расчёта индикатора CCI (числовой код) |
| t9 | Заголовок 9 — Заголовок группы настроек лота |
| LotExponent | Экспонента лота — Экспонента для расчёта размера лота в зависимости от количества открытых сделок |
| slip | Проскальгивание — Допустимое проскальгивание в пунктах |
| Lots | Начальный лот — Начальный размер лота |
| lotdecimal | Десятичные знаки лота — Количество знаков после запятой для округления размера лота |
| TakeProfit_ | Тейк-профит — Базовое значение тейк-профита в пунктах |
| PipStep__ | Шаг ордера (базовый) — Базовый шаг ордера в пунктах |
| MaxTrades | Максимум сделок — Максимальное количество одновременных сделок |
| g_magic_176 | Магический номер — Магический номер для идентификации сделок советника |
| t_ | Заголовок информации — Заголовок группы настроек информации |
Поиск по коду файла
extern string t1 = "????? Turbo";
extern bool Turbo = true; // ????? ?????
extern string t2 = "????? Dynamic";
extern bool Dynamic = true; // ????? Dynamic
extern string t3 = "? ?????? ??? ?????? ?????? Dynamic (?? < 4)";
extern int StartDynamic = 4; // ?????, ? ???????? ???????? ???????? ????? Dynamic
extern string t4 = "NewCycle ????? ?????? ??????????? ????? ???????";
extern bool NewCycle = true; // ????? ?????? ??????????? ????? ???????
extern string t5 = "?????? MA";
extern int PerMA = 20;
extern string t6 = "??????? CCI ??? ??????";
extern double Drop1 = 100; // ??????? CCI ??? ??????
extern double Drop2 = 105; // ??????? CCI ??? ??????
string t7 = "?????????? CCI";
int timefr1 = 1; // ?? CCI
int timefr2 = 5; // ?? CCI
extern string t8 = "??????? CCI";
extern double Per1 = 95; // ?????? CCI
extern double Per2 = 70; // ?????? CCI
extern int applied_price = 6; //?????? ??????? ???? ?????? ????. ??? ??????? ???. ?? ?????? 6!!!!!!!!!!!
extern string t9 = "????? ?????????";
extern double LotExponent = 1.95;
extern double slip = 5.0;
extern double Lots = 0.01;
extern int lotdecimal = 2;
extern double TakeProfit_ = 10.0;
extern double PipStep__ = 30.0;
double TakeProfit,PipStep_;
double PipStep,PipS ;
extern int MaxTrades = 10;
bool UseEquityStop = FALSE;
double TotalEquityRisk = 20.0;
bool UseTrailingStop = FALSE;
double TrailStart = 10.0;
double TrailStop = 10.0;
double Stoploss = 500.0;
bool UseTimeOut = FALSE;
double MaxTradeOpenHours = 48.0;
extern int g_magic_176 = 12324;
extern string t_ = "??????? ????????!";
double g_price_180, Balans, Sredstva ;
double gd_188;
double gd_unused_196;
double gd_unused_204;
double g_price_212;
double g_bid_220;
double g_ask_228;
double gd_236;
double gd_244;
double gd_260;
bool gi_268;
string gs_ilan_272 = "Ilan_16TD_CCI_1.2";
int g_time_280 = 0;
int gi_284,ord_16,ord_N ;
int gi_288 = 0;
double gd_292;
int g_pos_300 = 0;
int gi_304;
double gd_308 = 0.0;
bool gi_316 = FALSE;
bool gi_320 = FALSE;
bool gi_324 = FALSE;
int gi_328;
bool gi_332 = FALSE;
double gd_336;
double gd_344;
string txt,txt1;
string txt2="";
string txt3="";
color col = ForestGreen;
int init() {
// код доступен только после оплаты
}
int deinit() {
ObjectDelete("Lable");
ObjectDelete("Lable1");
ObjectDelete("Lable2");
ObjectDelete("Lable3");
return (0);
}
int start() {
// код доступен только после оплаты
}
double l_iclose_8;
double l_iclose_16;
if (UseTrailingStop) TrailingAlls(TrailStart, TrailStop, g_price_212);
if (UseTimeOut) {
if (TimeCurrent() >= gi_284) {
CloseThisSymbolAll();
Print("Closed All due to TimeOut");
}
}
TakeProfit = TakeProfit_;
if (Digits == 5 || Digits == 3)
{
TakeProfit = TakeProfit_ * 10;
PipStep_ = PipStep__ * 10;
}
{
Comment(""
+ "\n"
+ "Ilan_16TD_CCI_1.2"
+ "\n"
+ "________________________________"
+ "\n"
+ "??????: " + AccountCompany()
+ "\n"
+ "????? ???????: " + TimeToStr(TimeCurrent(), TIME_DATE|TIME_SECONDS)
+ "\n"
+ "________________________________"
+ "\n"
+ "????: " + AccountName()
+ "\n"
+ "????? ???? " + AccountNumber()
+ "\n"
+ "_______________________________"
+ "\n"
+ "??????? ??????? Ilan_16TD_CCI :" + CountTrades()
+ "\n"
+ "_______________________________"
+ "\n"
+ "??????: " + DoubleToStr(AccountBalance(), 2)
+ "\n"
+ "????????? ????????: " + DoubleToStr(AccountEquity(), 2)
+ "\n"
+ "_______________________________");
}
ord_16 = CountTrades();
if (Turbo)
{
if (ord_16 == 1) PipStep = PipStep_/3;
if (ord_16 == 2) PipStep = PipStep_/3*2;
if (ord_16 >= 3) PipStep = PipStep_;
}
else PipStep = PipStep_;
{ //=================Dynamic-?????
ord_N = CountTrades();
{if (ord_N >= StartDynamic)
if (Dynamic)
{ double hival=High[iHighest(NULL,0,MODE_HIGH,36,1)]; // ?????????? ?????????? ???? ?? ????????? 36 ????
double loval=Low[iLowest(NULL,0,MODE_LOW,36,1)]; // ?????????? ?????????? ???? ?? ????????? 36 ????//chart used for symbol and time period
PipS=NormalizeDouble((hival-loval)/3/Point,0); // ?????? PipStep
if (PipS>PipStep_*2) PipStep = PipStep_*2; // if dynamic pips fail, assign pips extreme value
} else PipStep = PipStep_;
}
}
{ //ForestGreen' YellowGreen' Yellow' OrangeRed' Red
Balans = NormalizeDouble( AccountBalance(),2);
Sredstva = NormalizeDouble(AccountEquity(),2);
if (Sredstva >= Balans/6*5) col = DodgerBlue;
if (Sredstva >= Balans/6*4 && Sredstva < Balans/6*5)col = DeepSkyBlue;
if (Sredstva >= Balans/6*3 && Sredstva < Balans/6*4)col = Gold;
if (Sredstva >= Balans/6*2 && Sredstva < Balans/6*3)col = OrangeRed;
if (Sredstva >= Balans/6 && Sredstva < Balans/6*2)col = Crimson;
if (Sredstva < Balans/5 )col = Red;
ObjectDelete("Lable2");
ObjectCreate("Lable2",OBJ_LABEL,0,0,1.0);
ObjectSet("Lable2", OBJPROP_CORNER, 3);
ObjectSet("Lable2", OBJPROP_XDISTANCE, 33);
ObjectSet("Lable2", OBJPROP_YDISTANCE, 31);
txt2=(DoubleToStr(AccountBalance(), 2));
ObjectSetText("Lable2","?????? "+txt2+"",16,"Times New Roman",DodgerBlue);
ObjectDelete("Lable3");
ObjectCreate("Lable3",OBJ_LABEL,0,0,1.0);
ObjectSet("Lable3", OBJPROP_CORNER, 3);
ObjectSet("Lable3", OBJPROP_XDISTANCE, 33);
ObjectSet("Lable3", OBJPROP_YDISTANCE, 11);
txt3=(DoubleToStr(AccountEquity(), 2));
ObjectSetText("Lable3","???????? "+txt3+"",16,"Times New Roman",col);
}
if (g_time_280 == Time[0]) return (0);
g_time_280 = Time[0];
double ld_0 = CalculateProfit();
if (UseEquityStop) {
if (ld_0 < 0.0 && MathAbs(ld_0) > TotalEquityRisk / 100.0 * AccountEquityHigh()) {
CloseThisSymbolAll();
Print("Closed All due to Stop Out");
gi_332 = FALSE;
}
}
gi_304 = CountTrades();
if (gi_304 == 0) gi_268 = FALSE;
for (g_pos_300 = OrdersTotal() - 1; g_pos_300 >= 0; g_pos_300--) {
OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != g_magic_176) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) {
if (OrderType() == OP_BUY) {
gi_320 = TRUE;
gi_324 = FALSE;
break;
}
}
if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) {
if (OrderType() == OP_SELL) {
gi_320 = FALSE;
gi_324 = TRUE;
break;
}
}
}
if (gi_304 > 0 && gi_304 <= MaxTrades) {
RefreshRates();
gd_236 = FindLastBuyPrice();
gd_244 = FindLastSellPrice();
if (gi_320 && gd_236 - Ask >= PipStep * Point) gi_316 = TRUE;
if (gi_324 && Bid - gd_244 >= PipStep * Point) gi_316 = TRUE;
}
if (gi_304 < 1) {
gi_324 = FALSE;
gi_320 = FALSE;
gi_316 = TRUE;
gd_188 = AccountEquity();
}
if (gi_316) {
gd_236 = FindLastBuyPrice();
gd_244 = FindLastSellPrice();
if (gi_324) {
gi_288 = gi_304;
gd_292 = NormalizeDouble(Lots * MathPow(LotExponent, gi_288), lotdecimal);
RefreshRates();
gi_328 = OpenPendingOrder(1, gd_292, NormalizeDouble(Bid,Digits), slip, NormalizeDouble(Ask,Digits), 0, 0, gs_ilan_272 + "-" + gi_288, g_magic_176, 0, HotPink);
if (gi_328 < 0) {
Print("Error: ", GetLastError());
return (0);
}
gd_244 = FindLastSellPrice();
gi_316 = FALSE;
gi_332 = TRUE;
} else {
if (gi_320) {
gi_288 = gi_304;
gd_292 = NormalizeDouble(Lots * MathPow(LotExponent, gi_288), lotdecimal);
gi_328 = OpenPendingOrder(0, gd_292, NormalizeDouble(Ask,Digits), slip, NormalizeDouble(Bid,Digits), 0, 0, gs_ilan_272 + "-" + gi_288, g_magic_176, 0, Lime);
if (gi_328 < 0) {
Print("Error: ", GetLastError());
return (0);
}
gd_236 = FindLastBuyPrice();
gi_316 = FALSE;
gi_332 = TRUE;
}
}
}
if (NewCycle) {
if (gi_316 && gi_304 < 1) {
l_iclose_8 = iMA(NULL,0,PerMA,0,MODE_LWMA,PRICE_WEIGHTED,3);//????????? ???????????..
l_iclose_16 = iMA(NULL,0,PerMA,0,MODE_LWMA,PRICE_WEIGHTED,1);//..??????????? ??????
g_bid_220 = NormalizeDouble(Bid,Digits);
g_ask_228 = NormalizeDouble(Ask,Digits);
if (!gi_324 && !gi_320) {
gi_288 = gi_304;
gd_292 = NormalizeDouble(Lots * MathPow(LotExponent, gi_288), lotdecimal);
if (l_iclose_8 != l_iclose_16) // ?? ??????, ???? ??? ???????? ????
{
if (l_iclose_8 > l_iclose_16)// ???? ???? ????????, ?????????? ???????????...
{
if ((iCCI(NULL,timefr1,Per1,applied_price,0)<(-Drop1))&&(iCCI(NULL,timefr2,Per2,applied_price,0)<(-Drop2)))//...? ???? ????????????? ?? 2-? ?? ?? ??????? ???
{
gi_328 = OpenPendingOrder(1, gd_292, g_bid_220, slip, g_bid_2Показано первые 50% кода (символов: 14166)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.