Сложно, мне бы уже сдать что-то подходящее. Его устраивает простая визуализация уровней и перенос стопов на прошлые уровни, на этом и достаточно. Не ожидал такой подвох. Если бы он не пропал надолго, Я бы сделал, но не сейчас. Арбитраж не хочется, итак уже есть.
Сложно, мне бы уже сдать что-то подходящее. Его устраивает простая визуализация уровней и перенос стопов на прошлые уровни, на этом и достаточно. Не ожидал такой подвох. Если бы он не пропал надолго, Я бы сделал, но не сейчас. Арбитраж не хочется, итак уже есть.
В ОнИнит расчет уровней и рисовалка. Для другой задачи, но рядом. Твоя часть для Абсолютных уровней.
Зы, у меня конечно не много не то. Надо понимать как отслеживаются ордера, позиции и трал, нарисовать то легко. но при достижении уровня нужно получается либо изменить цвет уровня, или удалить горизонтальную линию.
В ОнИнит расчет уровней и рисовалка. Для другой задачи, но рядом. Твоя часть для Абсолютных уровней.
Зы, у меня конечно не много не то. Надо понимать как отслеживаются ордера, позиции и трал, нарисовать то легко. но при достижении уровня нужно получается либо изменить цвет уровня, или удалить горизонтальную линию.
Что смог))) надо добавлять флаги срабатывания в кроссфункцию. не успеваю.
inputdouble PriceOrder=0.0; // Цена ордера, inputint TralStep=300; // Шаг отслеживания SL inputint NumberLevels=7; // Kоличество уровней для выбранного метода ВВЕРХinputbool FlagShowLine=true; // Рисовать / не рисовать уровни//---double LevelPrice[10]; // Количество уровней не более 10.string HLineName[10];
bool Del=true;
string MsgAlert,Tip;
int CurLevel;
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//---Расчет ценовых уровней
CalculationOfLevels(PriceOrder,TralStep,NumberLevels,Tip);
if(FlagShowLine)
{
ShowLine(Tip);
}
//--- create timerEventSetTimer(60);
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
Comment("");
int obj_total=ObjectsTotal();
PrintFormat("Всего %d объектов",obj_total);
for(int i=obj_total-1; i>=0; i--)
{
string name=ObjectName(i);
// PrintFormat("Объект %d: %s",i,name);ObjectDelete(name);
}
//--- destroy timerEventKillTimer();
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//---
CrossingLevel(CurLevel,Tip);
}
//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+voidOnTimer()
{
//---
}
//+------------------------------------------------------------------+//| Tester function |//+------------------------------------------------------------------+doubleOnTester()
{
//---double ret=0.0;
//---//---return(ret);
}
//+------------------------------------------------------------------+//| ChartEvent function |//+------------------------------------------------------------------+voidOnChartEvent(constint id,
constlong &lparam,
constdouble &dparam,
conststring &sparam)
{
//---
}
//+------------------------------------------------------------------+//+------------------------------------------------------------------+ //| Создает горизонтальную линию | //+------------------------------------------------------------------+ bool HLineCreate(constlong chart_ID=0, // ID графика conststring name="HLine", // имя линии constint sub_window=0, // номер подокна double price=0, // цена линии constcolor clr=clrRed, // цвет линии constENUM_LINE_STYLE style=STYLE_SOLID, // стиль линии constint width=1, // толщина линии constbool back=true, // на заднем плане constbool selection=false, // выделить для перемещений constbool hidden=false, // скрыт в списке объектов constlong z_order=0) // приоритет на нажатие мышью
{
//--- если цена не задана, то установим ее на уровне текущей цены Bid if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- сбросим значение ошибки ResetLastError();
//--- создадим горизонтальную линию if(!ObjectCreate(chart_ID,name,OBJ_HLINE,sub_window,0,price))
{
Print(__FUNCTION__,
": не удалось создать горизонтальную линию! Код ошибки = ",GetLastError());
return(false);
}
//--- установим цвет линии ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- установим стиль отображения линии ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- установим толщину линии ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- отобразим на переднем (false) или заднем (true) плане ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- включим (true) или отключим (false) режим перемещения линии мышью //--- при создании графического объекта функцией ObjectCreate, по умолчанию объект //--- нельзя выделить и перемещать. Внутри же этого метода параметр selection //--- по умолчанию равен true, что позволяет выделять и перемещать этот объект ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- установим приоритет на получение события нажатия мыши на графике ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- успешное выполнение return(true);
}
//+------------------------------------------------------------------+//| Поиск ближайших уровней |//+------------------------------------------------------------------+ void ShowModify(string name, string tip, bool del)
{
if(del){
ObjectDelete(name);
}
if(!del){
if(tip=="Sell"){
ObjectSetInteger(0,name,OBJPROP_COLOR,clrGold);
}
if(tip=="Buy"){
ObjectSetInteger(0,name,OBJPROP_COLOR,clrCoral);
}
}
}
//+------------------------------------------------------------------+//| Мониторинг пересечения уровней |//+------------------------------------------------------------------+bool CrossingLevel(int level, string tip)
{
if((tip=="Buy" && Bid > LevelPrice[level]) || (tip=="Sell" && Ask < LevelPrice[level])){
CurLevel=level++ ;
return(true);
}
return(false);
}
void CalculationOfLevels(double priceorder, int trstep, int numberl, string tip){
//---Расчет ценовых уровнейfor(int i=0; i<=(numberl); i++){
if(tip=="Buy"){
LevelPrice[i] = priceorder + trstep*Point;
if(tip=="Sell"){
LevelPrice[i] = priceorder - trstep*Point;
}
}
CurLevel=1;
}
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+void ShowLine(string tip)
{
color ClrLine=clrRed;
if(tip=="Buy") ClrLine=clrBlue;
if(tip=="Sell") ClrLine=clrRed;
for(int i=0;i<=(NumberLevels);i++){
//Alert("ShowLine_",ShowLine,"__",LevelPrice[i],"__",ClrLine);
HLineName[i]="LevelPrice_"+(string)i+"_"+(string)LevelPrice[i];
HLineCreate(0,HLineName[i],0,LevelPrice[i],(color)ClrLine,STYLE_SOLID,1);
}
}
Алгоритм коснулся / пересёк - передвинули не подходит?
Сложно, мне бы уже сдать что-то подходящее. Его устраивает простая визуализация уровней и перенос стопов на прошлые уровни, на этом и достаточно. Не ожидал такой подвох. Если бы он не пропал надолго, Я бы сделал, но не сейчас. Арбитраж не хочется, итак уже есть.
если шаг:=:const, то просто отобрази уровни с заданным шагом от текущего стоп-лосс. Ну что вот может быть проще.
если шаг:=:const, то просто отобрази уровни с заданным шагом от текущего стоп-лосс. Ну что вот может быть проще.
Да алгоритм Я понимаю. Открыть окно, записать что творится? Немного не те условия, чтобы вникнуть и написать.
P.S. при других раскладах Я бы не просил.
скорее всего - ex4 были собраны старым компилятором. Терминал обновился, а советник древний-друевний. Надо обращаться к автору
второй вариант - не сошлись (или по тех.причинам не удостоверены) подписи. Тут надо просто подождать, пока всякие DNS обновятся и связь наладиться.
Гипотетичный вариант - автор подпал под вечный бан. Посмотрите его профиль
подводя итог : сначала надо ЗАДАТЬ ВОПРОСЫ АВТОРУ
Спасибо
Сложно, мне бы уже сдать что-то подходящее. Его устраивает простая визуализация уровней и перенос стопов на прошлые уровни, на этом и достаточно. Не ожидал такой подвох. Если бы он не пропал надолго, Я бы сделал, но не сейчас. Арбитраж не хочется, итак уже есть.
В ОнИнит расчет уровней и рисовалка. Для другой задачи, но рядом. Твоя часть для Абсолютных уровней.
Зы, у меня конечно не много не то. Надо понимать как отслеживаются ордера, позиции и трал, нарисовать то легко. но при достижении уровня нужно получается либо изменить цвет уровня, или удалить горизонтальную линию.В ОнИнит расчет уровней и рисовалка. Для другой задачи, но рядом. Твоя часть для Абсолютных уровней.
Зы, у меня конечно не много не то. Надо понимать как отслеживаются ордера, позиции и трал, нарисовать то легко. но при достижении уровня нужно получается либо изменить цвет уровня, или удалить горизонтальную линию.Что смог))) надо добавлять флаги срабатывания в кроссфункцию. не успеваю.
Что смог))) надо добавлять флаги срабатывания в кроссфункцию. не успеваю.
Немного совсем не то.
У меня есть давно написанный примрно такой, но это советник с отображением, где будут открываться позиции
Сейчас нужно в коде трала внести дополнение, чтобы такие линии рисовались, где будет срабатывать трал.
Задача усложнена тем, что советник-трал устанавливается на один график, и линии нужно отображать на всех графиках, где есть открытые позиции.
Немного совсем не то.
У меня есть давно написанный примрно такой, но это советник с отображением, где будут открываться позиции
Сейчас нужно в коде трала внести дополнение, чтобы такие линии рисовались, где будет срабатывать трал.
Задача усложнена тем, что советник-трал устанавливается на один график, и линии нужно отображать на всех графиках, где есть открытые позиции.
Окна уже открыты все, или они открываются советником по мере появления позиций? Задача чарт найти)
Полагаю, что если есть позиция, то окно открыто.