Подскажите плз, как поставит метку на графике. Например, ордер не открылся, но хотя бы видеть на графике, в какой точке он должен был открыться.
Спасибо.
Как-то так
#include <stderror.mqh>//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+int start()
{
int Err;
//----if(...........) //покупаем
{
Err=OrderSend(..................);
if(Err<0)
SetArrow(159, Blue,"ошибка открытия № "+GetLastError(),Time[0],Open[0],2);
}
if(...........) //продаем
{
Err=OrderSend(..................);
if(Err<0)
SetArrow(159, Red,"ошибка открытия № "+GetLastError(),Time[0],Open[0],2);
}
//----return(0);
}
//+------------------------------------------------------------------+//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 12.10.2007 |//| Описание : Установка значка на графике, объект OBJ_ARROW. |//+----------------------------------------------------------------------------+//| Параметры: |//| cd - код значка |//| cl - цвет значка |//| nm - наименование ("" - время открытия текущего бара) |//| t1 - время открытия бара (0 - текущий бар) |//| p1 - ценовой уровень (0 - Bid) |//| sz - размер значка (0 - по умолчанию) |//+----------------------------------------------------------------------------+void SetArrow(int cd, color cl,
string nm="", datetime t1=0, double p1=0, int sz=0) {
if (nm=="") nm=DoubleToStr(Time[0], 0);
if (t1<=0) t1=Time[0];
if (p1<=0) p1=Bid;
if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_ARROW, 0, 0,0);
ObjectSet(nm, OBJPROP_TIME1 , t1);
ObjectSet(nm, OBJPROP_PRICE1 , p1);
ObjectSet(nm, OBJPROP_ARROWCODE, cd);
ObjectSet(nm, OBJPROP_COLOR , cl);
ObjectSet(nm, OBJPROP_WIDTH , sz);
}
Вопрос такой. Я уже не первый раз встречаю такую ситуацию:
Если на каждом тике вызывать функцию траала или, например, безубытка, то выскакивает ошибка - 1. Что означает согласно документации:
ERR_NO_RESULT 1 Нет ошибки, но результат неизвестен
Если вызывать не открыто в функции старт, то есть не просто вписал функцию с параметрами прямо в start, а вызывать её на каждом баре, т.е. не потиково, то ошибки - нет...
Я имею ввиду так:
int start()
{
MovingStopLossToBU();
// Что-то дальше делаем..
Почему так?
И вообще как грамотнее это реализуется? На каждом тике будет накладно по ресурсам?
Вопрос такой. Я уже не первый раз встречаю такую ситуацию:
Если на каждом тике вызывать функцию траала или, например, безубытка, то выскакивает ошибка - 1. Что означает согласно документации:
Если вызывать не открыто в функции старт, то есть не просто вписал функцию с параметрами прямо в start, а вызывать её на каждом баре, т.е. не потиково, то ошибки - нет...
Я имею ввиду так:
Почему так?
И вообще как грамотнее это реализуется? На каждом тике будет накладно по ресурсам?
Я бы Вам посоветовал не по барам, по столько-то пипс. Если необходимо, то для этого и служат ресурсы. А ошибка "не ошибка" выскакивает, когда повторяется цена для модификации, которая уже есть. Поэтому нужно сделать пошагово, как уже Вам посоветовал вначале.
Вопрос такой. Я уже не первый раз встречаю такую ситуацию:
Если на каждом тике вызывать функцию траала или, например, безубытка, то выскакивает ошибка - 1. Что означает согласно документации:
Если вызывать не открыто в функции старт, то есть не просто вписал функцию с параметрами прямо в start, а вызывать её на каждом баре, т.е. не потиково, то ошибки - нет...
Я имею ввиду так:
Почему так?
И вообще как грамотнее это реализуется? На каждом тике будет накладно по ресурсам?
Трал пытается переставить СЛ на тот же уровень. Нужно добавить проверку, уровень трала должен отличатся от текущего СЛ.
Если стоп - новый стоп (в б.у.) не равен ноль... то модифицируем... Если нет, то не модифицируем. Поэтому мне и не понятно как так происходит. Ведь я понимаю, что нужна проверка на равенство прошлого и нового стопа и я её сделал.
Добрый день,
Подскажите плз, как поставит метку на графике. Например, ордер не открылся, но хотя бы видеть на графике, в какой точке он должен был открыться.
Спасибо.
Как-то так
Да извините запутался, первый раз писал на форум. Сначала копипастел, затем решил ручками и запутался... но в примере выше все верно..
MA1>MA2 и МА1<MA3 и МА3<МА4
Ознакомьтесь со следующей веткой
Что-то тут странно
MA1>MA2 и MA2>MA3 и тут же MA1<MA3
Тем более что достаточно
Вопрос такой. Я уже не первый раз встречаю такую ситуацию:
Если на каждом тике вызывать функцию траала или, например, безубытка, то выскакивает ошибка - 1. Что означает согласно документации:
ERR_NO_RESULT 1 Нет ошибки, но результат неизвестенЕсли вызывать не открыто в функции старт, то есть не просто вписал функцию с параметрами прямо в start, а вызывать её на каждом баре, т.е. не потиково, то ошибки - нет...
Я имею ввиду так:
Почему так?
И вообще как грамотнее это реализуется? На каждом тике будет накладно по ресурсам?
Всем добрый день.
Нужна ваша помощь. Не пойму в чём дело
if (OrderStopLoss() != NormalizeDouble(t6,5))
{
a=10;
}
То, что OrderStopLoss()= 1.3017 и NormalizeDouble(t6,5)=1.3017 условие всё равно выполняется, то есть a=10. А оно не должно выполняться.
В чём может быть причина?
Вопрос такой. Я уже не первый раз встречаю такую ситуацию:
Если на каждом тике вызывать функцию траала или, например, безубытка, то выскакивает ошибка - 1. Что означает согласно документации:
Если вызывать не открыто в функции старт, то есть не просто вписал функцию с параметрами прямо в start, а вызывать её на каждом баре, т.е. не потиково, то ошибки - нет...
Я имею ввиду так:
Почему так?
И вообще как грамотнее это реализуется? На каждом тике будет накладно по ресурсам?
Вопрос такой. Я уже не первый раз встречаю такую ситуацию:
Если на каждом тике вызывать функцию траала или, например, безубытка, то выскакивает ошибка - 1. Что означает согласно документации:
Если вызывать не открыто в функции старт, то есть не просто вписал функцию с параметрами прямо в start, а вызывать её на каждом баре, т.е. не потиково, то ошибки - нет...
Я имею ввиду так:
Почему так?
И вообще как грамотнее это реализуется? На каждом тике будет накладно по ресурсам?
Трал пытается переставить СЛ на тот же уровень. Нужно добавить проверку, уровень трала должен отличатся от текущего СЛ.
Трал пытается переставить СЛ на тот же уровень. Нужно добавить проверку, уровень трала должен отличатся от текущего СЛ.
Если стоп - новый стоп (в б.у.) не равен ноль... то модифицируем... Если нет, то не модифицируем. Поэтому мне и не понятно как так происходит. Ведь я понимаю, что нужна проверка на равенство прошлого и нового стопа и я её сделал.Так у меня ж есть проверка на этот случай:
Здравствуйте ! подскажите пожалуйста . как можно модифицировать начальный и последний ордер под 1 T/P спасибо
gi_304 = CountTrades();
g_price_212 = 0;
double ld_24 = 0;
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 || OrderType() == OP_SELL) {
g_price_212 += OrderOpenPrice() * OrderLots();
ld_24 += OrderLots();
}
}
}
if (gi_304 > 0) g_price_212 = NormalizeDouble(g_price_212 / ld_24, Digits);
if (gi_332) {
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) {
g_price_180 = g_price_212 + TakeProfit2 * Point;
gd_unused_196 = g_price_180;
gd_308 = g_price_212 - Stoploss * Point;
gi_268 = TRUE;
}
}
if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) {
if (OrderType() == OP_SELL) {
g_price_180 = g_price_212 - TakeProfit2 * Point;
gd_unused_204 = g_price_180;
gd_308 = g_price_212 + Stoploss * Point;
gi_268 = TRUE;
}
}
}
}
if (gi_332) {
if (gi_268 == TRUE) {
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) OrderModify(OrderTicket(), g_price_212, OrderStopLoss(), g_price_180, 0, Yellow);
gi_332 = FALSE;
}
}
}
return (0);
Здравствуйте ! подскажите пожалуйста . как можно модифицировать начальный и последний ордер под 1 T/P спасибо
Отредактируйте этот код, что бы не походил на взломанный