Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1105
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Ого!!! Спасибо! Это требует осмысления.
Может где-нибудь есть "самоучитель" по новым правилам? 4-х значный номер страницы немного напрягает...
А кому щас легко... В архиве ещё 5 таких тем про новичков )))
Если честно, примеров из справки и кодобазы вполне достаточно, если уже есть опыт программирования, желательно на С++. Если опыта совсем нет, тогда можно поизучать учебник С++ сначала, MQL очень похож по синтаксису.
А кому щас легко... В архиве ещё 5 таких тем про новичков )))
Если честно, примеров из справки и кодобазы вполне достаточно, если уже есть опыт программирования, желательно на С++. Если опыта совсем нет, тогда можно поизучать учебник С++ сначала, MQL очень похож по синтаксису.
string Опыта нет = учебник С++; )))
Благодарю вас за помощь!
Добрый день, уважаемые!
Помогите пожалуйста добавить алерт в индикатор при появлении стрелки с указанием валютной пары.
Сам пробовал, но как говориться трудно не знать и забыть. Заранее спасибо.
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 White
#property indicator_color2 White
#property indicator_color3 LightGreen
#property indicator_color4 Red
extern int CountBars = 300;
extern string FS = " ** Filter sensitivity: High <-[1..3]-> Low ** ";
extern int Sensitivity = 2;
double g_ibuf_92[];
double g_ibuf_96[];
double g_ibuf_100[];
double g_ibuf_104[];
int gi_unused_108 = -1;
int init() {
IndicatorBuffers(4);
SetIndexStyle(2, DRAW_ARROW);
SetIndexArrow(2, 233);
SetIndexBuffer(2, g_ibuf_92);
SetIndexStyle(3, DRAW_ARROW);
SetIndexArrow(3, 234);
SetIndexBuffer(3, g_ibuf_96);
SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 3, White);
SetIndexBuffer(0, g_ibuf_100);
SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 3, White);
SetIndexBuffer(1, g_ibuf_104);
SetIndexEmptyValue(0, 0);
SetIndexEmptyValue(1, 0);
SetIndexEmptyValue(2, 0);
SetIndexEmptyValue(3, 0);
SetIndexLabel(2, "Buy Signal");
SetIndexLabel(3, "Sell Signal");
SetIndexLabel(0, "High");
SetIndexLabel(1, "Low");
SetIndexEmptyValue(0, EMPTY_VALUE);
SetIndexEmptyValue(1, EMPTY_VALUE);
SetIndexEmptyValue(2, EMPTY_VALUE);
SetIndexEmptyValue(3, EMPTY_VALUE);
string ls_0 = "Scalper Signal";
IndicatorShortName(ls_0);
if (Sensitivity < 1) Sensitivity = 1;
if (Sensitivity > 3) Sensitivity = 3;
return (0);
}
int deinit() {
return (0);
}
double sellSignal(int ai_0) {
bool li_4 = TRUE;
if (Sensitivity > 2)
if (iHigh(Symbol(), Period(), ai_0 + 6) >= iHigh(Symbol(), Period(), ai_0 + 5)) li_4 = FALSE;
if (Sensitivity > 1)
if (iHigh(Symbol(), Period(), ai_0 + 5) >= iHigh(Symbol(), Period(), ai_0 + 4)) li_4 = FALSE;
if (Sensitivity > 0)
if (iHigh(Symbol(), Period(), ai_0 + 4) >= iHigh(Symbol(), Period(), ai_0 + 3)) li_4 = FALSE;
if (li_4) {
if (iClose(Symbol(), Period(), ai_0 + 2) < iHigh(Symbol(), Period(), ai_0 + 3))
if (iClose(Symbol(), Period(), ai_0 + 1) < iLow(Symbol(), Period(), ai_0 + 3)) return (iHigh(Symbol(), Period(), ai_0 + 3) + 10.0 * Point);
}
return (0);
}
double buySignal(int ai_0) {
bool li_4 = TRUE;
if (Sensitivity > 2)
if (iLow(Symbol(), Period(), ai_0 + 6) <= iLow(Symbol(), Period(), ai_0 + 5)) li_4 = FALSE;
if (Sensitivity > 1)
if (iLow(Symbol(), Period(), ai_0 + 5) <= iLow(Symbol(), Period(), ai_0 + 4)) li_4 = FALSE;
if (Sensitivity > 0)
if (iLow(Symbol(), Period(), ai_0 + 4) <= iLow(Symbol(), Period(), ai_0 + 3)) li_4 = FALSE;
if (li_4) {
if (iClose(Symbol(), Period(), ai_0 + 2) > iLow(Symbol(), Period(), ai_0 + 3))
if (iClose(Symbol(), Period(), ai_0 + 1) > iHigh(Symbol(), Period(), ai_0 + 3)) return (iLow(Symbol(), Period(), ai_0 + 3) - 10.0 * Point);
}
return (0);
}
int start() {
int li_0 = IndicatorCounted();
if (li_0 < 0) return (-1);
if (li_0 > 0) li_0--;
int li_4 = Bars - li_0;
for (int l_count_8 = 0; l_count_8 < li_4; l_count_8++) {
g_ibuf_92[l_count_8 + 3] = buySignal(l_count_8);
g_ibuf_96[l_count_8 + 3] = sellSignal(l_count_8);
if (buySignal(l_count_8) > 0.0 || sellSignal(l_count_8) > 0.0) {
g_ibuf_100[l_count_8 + 3] = iHigh(Symbol(), Period(), l_count_8 + 3);
g_ibuf_104[l_count_8 + 3] = iLow(Symbol(), Period(), l_count_8 + 3);
}
}
return (0);
}
Здравствовать копателям.
Какая-то кривизна у меня выходит с определением результата по истории ордеров.
Стратегия:
1-Открываются 2 ордера в разном направлении (лок по-факту) с коротким стопом и длинным профитом.
2-если цена уверенно уходит из диапазона, то она сшибает стоп одного из ордеров, и идёт за длинным профитом по другому ордеру.
3-в момент сшибания стопа одного из ордеров, на уровне его открытия выставляется отложка, и в случае возврата цены, снова открывается ордер
и возвращаемся к состоянию лока до очередного движения к профиту через вышибание короткого стопа.
Задача:
Отследить 3 вышибания стопа, ибо на 4-ой отложке, включается Мартин. Проблема в том, что что-то идёт не так. Я определяю профитность ордера по истории OrderProfit()-ом,
а вот каким образом работает OrdersHistoryTotal() я так и не понял. То ли функция смотрит порядковый номер, то ли количественный номер ордера, так же не пойму, как она воспринимает
удаление отложки (то ли как убыток то ли никак вовсе). Каким образом отследить 3 последовательных убытка именно вот в такой ситуации, когда в истории помимо убытка есть ещё куча всего другого?
Здравствовать копателям.
Какая-то кривизна у меня выходит с определением результата по истории ордеров.
Стратегия:
1-Открываются 2 ордера в разном направлении (лок по-факту) с коротким стопом и длинным профитом.
2-если цена уверенно уходит из диапазона, то она сшибает стоп одного из ордеров, и идёт за длинным профитом по другому ордеру.
3-в момент сшибания стопа одного из ордеров, на уровне его открытия выставляется отложка, и в случае возврата цены, снова открывается ордер
и возвращаемся к состоянию лока до очередного движения к профиту через вышибание короткого стопа.
Задача:
Отследить 3 вышибания стопа, ибо на 4-ой отложке, включается Мартин. Проблема в том, что что-то идёт не так. Я определяю профитность ордера по истории OrderProfit()-ом,
а вот каким образом работает OrdersHistoryTotal() я так и не понял. То ли функция смотрит порядковый номер, то ли количественный номер ордера, так же не пойму, как она воспринимает
удаление отложки (то ли как убыток то ли никак вовсе). Каким образом отследить 3 последовательных убытка именно вот в такой ситуации, когда в истории помимо убытка есть ещё куча всего другого?
Первое, что надо запомнить - отложенный ордер не бывает убыточным, он или сработал, или был удален.
Убыток надо смотреть на рыночных ордерах (бай, селл).
OrdersHistoryTotal() возвращает количество ВСЕХ ордеров в доступной истории торговли (включая пополнения и снятия со счёта, если режим отображения "вся история"). Номер 0 обычно - пополнение баланса после открытия счёта, то есть первый ордер; номер OrdersHistoryTotal()-1 - последний ордер в истории.
То есть надо в цикле перебирать ордера с последнего по первый, попутно считая отложки и убыточные ордера.
Но зачем вообще ставить отложки, если всегда можно дождаться, когда цена опять достигнет уровня закрывшегося по стопу ордера и открыться сразу по рынку? Отложки - лишнее звено в этом случае, вносит путаницу в счёте.
1-Открываются 2 ордера в разном направлении (лок по-факту) с коротким стопом и длинным профитом.
2-если цена уверенно уходит из диапазона, то она сшибает стоп одного из ордеров, и идёт за длинным профитом по другому ордеру.
Посмотрел на Вашу стратегию глазами программиста. Когда цена идет вверх доходит до SL Sell, то остается один ордер Buy со своим SL и где-то там наверху его TP. При этом вы успели получить небольшой убыток от закрытого ордера. А теперь давайте рассмотрим вариант с двумя отложками. Вместо открытия двух ордеров ставим две отложки на тех самых местах, где у Вас стояли SL. Когда цена доходит до Buy Stopl, то открывается ордер на покупку и получается та же самая позиция, но убыток отсутствует. А теперь самое интересное. По мере движения цены вверх ...
...А по мере движения цены вверх по вашему принципу, ваш ТП стал дальше. И шансов забрать профит у вас меньше чем у меня, если рассматривать наши действия в моменте.
И даже если не торговать параллельно мне с вами, то ваша опорная цена находится между отложками, а моя по-факту. И это будет всегда-вы дарите рынку часть направленного движения.
Если вы не знаете, то учтите, что даже несчастные 2 пункта спреда делают из положительной системы убыточную. Судя по первому рисунку, у вас спред около 20 пунктов по 5-тизнаку,
ибо разница между одновременно выставленными ордерами "на глаз" 40 пунктов по рисунку.
Суть не в этом...нужен фрагмент кода, верного выявления серии из 3-ёх выбитых стопов. Зачем каждый норовит скорректировать систему? И методика вышесказанного товарища
тоже не подойдёт. По рынку просто могут не дать открыться, или откроют там где не надо. Блин парни, я всех вас прекрасно понимаю, и ваше желание поделиться опытом. Но мне просто надо отследить 3 стопа.
Всё уже на мази, просто случайно увидел, что проскочил не тот ордер с удвоением. Как оказалось, Хисторитотал выдал всё что посчитал нужным, и цикл определения закрытого ордера по убытку из истории пропустил ордер.
Надо отходить от квалификации Кодер и постигать азы программирования. Вот здесь подробнее... И вот тут
Вот задача. Что возвращает, как выразился автор, Хисторитотал в этом скрипте на одном и том же счете в воскресенье.
Почему по разному?
Счет один, а ордеров то больше то меньше? 0 228 228 216 98 ? А ведь если меньше ордеров - обработка быстрее!!!
Клиент потеет - невозможно работать, Терминал глючит, Хисторитотал выдал то, что захотел, цикл взял и пропустил !
Добрый день всем. Помогите поднять стрелки в индикаторе, нижние нормально, а верхние поверх свечей.
пробовал ObjectSet(Arrow_name_jack1, OBJPROP_YDISTANCE,20); не получилось. Точка привязки стрелки (объекта) вверху, как её сместить вверх?
Добрый день всем. Помогите поднять стрелки в индикаторе, нижние нормально, а верхние поверх свечей.
пробовал ObjectSet(Arrow_name_jack1, OBJPROP_YDISTANCE,20); не получилось. Точка привязки стрелки (объекта) вверху, как её сместить вверх?
ObjectSetInteger(0,Arrow_name_jack1 ,OBJPROP_ANCHOR,ANCHOR_BOTTOM);
Рекомендую использовать отдельные переменные для хранения имён верхней и нижней стрелок, во избежание путаницы.
И да, рисовать стрелки в индикаторе объектами - извращение. Есть же индикаторные буферы:
SetIndexStyle(0,DRAW_ARROW,0,1,clrRed);
SetIndexArrow(0,242);