ЦитатаИсправлено :).
Я конечно извиняюсь, но после такой правки индикатор не только посторонние объекты не будет удалять, но и сам себя :) Думаю это не очень удобно. Вот такой вариант будет правильней все-же....
От xbms, 13 апреля, 2013 в Уголок Программиста
ЦитатаИсправлено :).
ЦитатаИсправлено :).
Я конечно извиняюсь, но после такой правки индикатор не только посторонние объекты не будет удалять, но и сам себя :) Думаю это не очень удобно. Вот такой вариант будет правильней все-же....
Уважаемые специалисты. При переключении ТФ, индикатор стирает построенные мной наклонные линии /горизонтальные не трогает/.
Большая просьба - устраните пожалуйста этот недостаток.
Исправлено :).
Изменено 19 февраля, 2017 пользователем Скобарь
Подскажите пожалуйста как научить советник определять, что наступил новый день (не на Д1) и выполнить такое условие:
если наступил новый день и цена побывала выше/ниже заданного уровня, то сегодня не торгуем?
Индикатор Williams percent Range, надо чтобы сова продавала на ВЫХОДЕ из зоны перекупленности и покупала на ВЫХОДЕ из перепроданности. Хотя бы логически как это сделать, не понимаю. Ну и если не лень то кодом)
Сваял на скорую руку :).

Подскажите пожалуйста как научить советник определять, что наступил новый день (не на Д1) и выполнить такое условие:
если наступил новый день и цена побывала выше/ниже заданного уровня, то сегодня не торгуем?
Уважаемые програмисты, как передавать свет (color) из эксперта в индикатор?
Приветствую Всех.
Правильно я написал структуру?
//кол-во ордеров по типам
struct TQtyOrder
{
int ArrOrd[6];//6 типов ордеров
int QtyTotal; //всего ордеров
};
//ордер
struct TOrder
{
string Comm; //комментарий
double OpenPrice; //курс открытия ордера
double StopLoss; //стоп лосс
double TakeProfit; //тейк профит
double Lots; //кол-во лотов
double Profit; //текущий профит
int Ticket; //номер ордера
int Type; //тип ордера
int MagicNumber;//магическое число
};
//ордера
struct TAllOrder
{
TOrder ArrOrder[31];//все ордера максимум 31
TQtyOrder QtyOrder; //кол-во ордеров по типам
};
Нужно выравнивания элементов структур с помощью #pragma pack(1) ?
Сходу структуры объявлены правильно. У Вас что-то не работает? в связи с чем вопрос?
Приветствую Вас господа. Прошу помощи в программировании, как правильно написать условие в советнике, точнее проверку на «срабатывание» отложенного ордера. Алгоритм следующий, выставляются отложенные ордера. При активировании заданной переменной MaxTrades количество ордеров и более одинакового направления, для этой группы ордеров выставляются ТП и СЛ. Я написал так:
.........
void OnTick()
{
int countBUY=CountOrders(OP_BUY); // количество открытых ордеров бай
int countSELL=CountOrders(OP_SELL); // количество открытых ордеров селл
if(countBUY>=MaxTrades) // проверка на количество открытых ордеров бай
{
SetTakeProfitBuy(); // выставляем для группы ордеров бай ТП и СЛ
}
if(countSELL>=MaxTrades) // проверка на количество открытых ордеров селл
{
SetTakeProfitSell(); // выставляем для группы ордеров селл ТП и СЛ
}
………
Соответственно, программа на каждом тике проходит проверку, забивает логи ошибкой 1 (Нет ошибки, но результат неизвестен). Подскажите как это можно исправить?
Благодарю за Ваше внимание и время!
SilverKZ
Изменено 24 февраля, 2017 пользователем Ruslan S.
//+------------------------------------------------------------------+
void SetTakeProfitBuy()
{
double avgPrice = 0;
double sumLots = 0;
for(int order=OrdersTotal()-1; order>=0; order--)
{
returnvalue=OrderSelect(order,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_BUY)
{
avgPrice += OrderTakeProfit()*OrderLots();
sumLots += OrderLots();
}
}
double newTakeProfit=avgPrice/sumLots;
newTakeProfit=NormalizeDouble(newTakeProfit,Digits);
for(order=OrdersTotal()-1; order>=0; order--)
{
returnvalue=OrderSelect(order,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_BUY && OrderTakeProfit()!=newTakeProfit)
{
returnvalue=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),newTakeProfit,0,clrYellow);
}
}
}
//+------------------------------------------------------------------+
Только если будете передавать во внешнюю длл. Но тогда строку надо исключать... Вообще со строками геморрой я не включаю коммент в структуру ордера, а использую отдельной переменной, это связано с простотой присваивания структур. Пример:Нужно выравнивания элементов структур с помощью #pragma pack(1) ?
только рыночные считать и сравнивать, типа было 5 стало 6 - значит сработала отложка.придумать как определить что сработал отложенный ордер
Изменено 25 февраля, 2017 пользователем Ruslan S.
ЦитатаА при срабатывании отложек они формируют сетку, и я их пытаюсь упорядочить в общий ТП.
//- функция модификации ордера (выставление тейка для сетки)
void ModifyOrders(int otype)
{
double avg_price, order_lots=0;
price=0;
//- ищем в цикле последний открытый ордер
for(int i=OrdersTotal()-1; i>=0; i--)
{
//- выбираем ордера
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
//- проверяем наш ли это ордер (по паре и меджику)
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
{
//- пересчитываем цену с учетом объемов
price += OrderOpenPrice() * OrderLots();
//- считаем суммарный объем
order_lots += OrderLots();
}
}
}
//- вычисляем среднюю цену и приводи к нормальному виду
avg_price = NormalizeDouble(price / order_lots, Digits);
//- в зависимости от типа ордера вычисляем тейк
if(otype == OP_BUY) tp = NormalizeDouble(avg_price + TakeProfit*Point, Digits);
if(otype == OP_SELL) tp = NormalizeDouble(avg_price - TakeProfit*Point, Digits);
//- модификация ордеров
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
{
//-модифицируем ордер
if(OrderModify(OrderTicket(), OrderOpenPrice(), 0, tp, 0))
Print("Ордера успешно модифицированы");
else Print("Ошибка модификации ордеров");
}
}
}
}
Изменено 25 февраля, 2017 пользователем Ruslan S.
Да, я все понял, спасибо...
Только в книге по MQL написано, что сначала в структуре нужно объявлять большие данные, т.е.
double = 8 байт
datetime, тоже 8 байт
а уже потом
int = 4 байта...
т.е. выравнивания элементов.
или это касается только если я буду передавать во внешнюю dll?
Нет вроде все пока работает, просто я хочу, что бы было все правильно и разных глюков с неправильной организацией структуры не возникало, которых потом очень сложно будет отловить..
Помогите добавить на панель кнопки переключения TF, так чтобы они могли в тестере переключать TF на графике. Если это возможно конечно, спасибо.
Помогите добавить на панель кнопки переключения TF, так чтобы они могли в тестере переключать TF на графике. Если это возможно конечно, спасибо.
Есть разные представления о правильности... у структур нет никаких глюков с выравниванием ( если пользоваться внутри МТ ).просто я хочу, что бы было все правильно и разных глюков с неправильной организацией структуры не возникало, которых потом очень сложно будет отловить..
ПС: я считаю не правильным создавать дублирующий массив данных ордеров, поддерживать его в актуальном состоянии - зачем? У МТ это нормально организовано и работает эффективно. имхо.
Для публикации сообщений создайте учётную запись или авторизуйтесь
Перейти к списку тем