Судя по скрину, индикатор с двумя выходными индексными массивами, которые содержат либо EMPTY_VALUE, либо цену и меняются в процессе движения цены. Если есть возможность считывать показания этих буферов, то нужно (учитывая, что они одновременно не могут сигнализировать и сменяют друг друга) в советнике задать 2 флаговые переменные, которые будут принимать значения (любые целочисленные) для бай и селл и если переменная находится в бае и приходит еще сигнал на бай (судя по графику, просто вместо пустого значения должен придти сигнал больше предыдущего (меньше для селла), переменная увеличивается на 1 и если переменная наберет нужное количество сигналов, то даем команду на открытие ордера (если так задумано). А если переменная одного направления не набрала нужного количества сигналов (пришел противоположный сигнал), то ее обнуляем и открываем счет переменной другого направления. На самом деле все умещается в 5-10 строк максимум кода.Привет!Уважаемые знатоки подскажите пожалуйса как сделать так,чтобы в советнике открывался ордер на третьем(там на картинке надеюсь доступно и понятно),а не на первом(белом).или с третьего и все последующие не суть,главно не с первого.помогите !
void OpenOrd()
{
double up=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,1,1);
double up2=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,1,2);
double down=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,2,1);
double down2=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,2,2);
bool up_ok=false;
if(up>up2)
{
for(int i=2;i<Bars;i++)
{
down=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,2,i);
if(down!=EMPTY_VALUE) break;
up=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,1,i);
up2=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,1,i+1);
if(up>up2) {up_ok=true;break;} {PutOrder(0,Ask);}
}
}
}
Добрый день!eevviill2 спасибо!Только со второго начинает открывать,на третий ни чего не выходит у меня;пробую добавляю меняю for(int i=2;i<Bars;i++) ни че не выходит;можете поправить или что там надо еще,чтоб на третьей заходить?
PHP:void OpenOrd() { double up=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,1,1); double up2=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,1,2); double down=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,2,1); double down2=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,2,2); bool up_ok=false; if(up>up2) { for(int i=2;i<Bars;i++) { down=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,2,i); if(down!=EMPTY_VALUE) break; up=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,1,i); up2=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,1,i+1); if(up>up2) {up_ok=true;break;} {PutOrder(0,Ask);} } } }
void OpenOrd()
{
double up=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,1,1);
double up2=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,1,2);
double down=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,2,1);
double down2=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,2,2);
int up_cou=0;
if(up>up2)
{
up_cou++;
for(int i=2;i<Bars;i++)
{
down=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,2,i);
if(down!=EMPTY_VALUE) break;
up=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,1,i);
up2=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,1,i+1);
if(up>up2) up_cou++;
}
}
if(up_cou==3) PutOrder(0,Ask);
}
string StringUpperCase(string str)
{
string s=str;
int lenght=StringLen(str)-1;
int _char;
while(lenght>=0)
{
_char=StringGetChar(s,lenght);
if((_char>96 && _char<123) || (_char>223 && _char<256))
{
s=StringSetChar(s,lenght,_char-32);
}
else
if(_char>-33 && _char<0)
s=StringSetChar(s,lenght,_char+224);
lenght--;
}
return(s);
}
bool StringToUpper(
string& string_var // строка для обработки
);
Самый простой способ - (тип, в который переводим)(значение или формула с переменными) в итоге если такой прямой перевод между переменными возможен, то получаем то, что хотели. К примеру int Time=(int)TimeCurrent(); запишет в переменную Time значение datetime, возвращаемое функцией TimeCurrent(), в целочисленном виде. Если прямого перевода быть не может (нельзя переменную string перевести в int), то нужно это делать в несколько ходов, опять же применительно к конкретному случаю:Я вообщето попросил что бы мне помогли с переводом типов а не с изменением шрифта. И я даже в справке посмотрел!
string x="1234";
int xx=(int)StrToDouble(x,0);
Самый простой способ - (тип, в который переводим)(значение или формула с переменными) в итоге если такой прямой перевод между переменными возможен, то получаем то, что хотели. К примеру int Time=(int)TimeCurrent(); запишет в переменную Time значение datetime, возвращаемое функцией TimeCurrent(), в целочисленном виде. Если прямого перевода быть не может (нельзя переменную string перевести в int), то нужно это делать в несколько ходов, опять же применительно к конкретному случаю:
и т.п.PHP:string x="1234"; int xx=(int)DoubleToStr(x,0);
Переводимый аргумент не всегда обязательно заключать в скобки - в основном это требуется, если сразу переводим какой-то расчет типа int x=(int)(x1/x2*x3-x4).
Извиняюсь - не ту функцию вписал в примере (чисто на автомате обратную):СПАСИБО ГРОМАДНЕЕШЕ!!!!
string x="1234";
int xx=(int)StrToDouble(x,0);
Но я всё равно понял! Спасибо ещё раз!Извиняюсь - не ту функцию вписал в примере (чисто на автомате обратную):
PHP:string x="1234"; int xx=(int)StrToDouble(x,0);
![]()
Это ты из моего поста стянул?Вообщето практичней делать функцию типа инт для сигнала и записывать значение в переменную.
Правильно пишется "чётко"... Прикол, но "Ё" форум не понимает..."четко" проходит..eevviill2,Все чотко,Спасибо!!!
Дык. Вся твоя функция(которая делает из меленькой буквы большую) вмещяется в одной строке которую я написалЯ вообщето попросил что бы мне помогли с переводом типов а не с изменением шрифта. И я даже в справке посмотрел!
ПараметрыPHP:bool StringToUpper( string& string_var // строка для обработки );
string_var
[in][out] Строка.
Возвращаемое значение
В случае успешного выполнения возвращает true, иначе false. Для получения кода ошибки нужно вызвать функцию GetLastError().
Пожалуйста не надо меня дурить!
Мой первый щаблон советника был ещё 6 лет назад.Это ты из моего поста стянул?
Написал вчера многоуровневый трал с частичным закрытием ордера - то, о чем мы с тобой базарили по поводу виртуального трала и каким способом запоминать значения. Код вышел по объему сравним с совом среднего уровня.
Вопрос на засыпку: как после частичного закрытия ордера продолжить его трал, если изначальный ордер полностью закрывается терминалом и открывается новый ордер с уменьшенным лотом, но другим тикетом и все установки нужно сразу переписать на новый тикет, который нельзя получить какой-то командой на момент открытия, т.к. его (измененный ордер) открывает терминал на автомате.
А зачем он нужен, если этого ордера уже нет и не будет в рынке - его уже курировать не нужно. - Нужен ордер, который с уменьшенным лотом занял его место с автоматически сгенерированным тикетом самим брокером.По коментарию. Там пишется номер тикета от которого был откушен кусок.
Вопрос на засыпку: как после частичного закрытия ордера продолжить его трал, если изначальный ордер полностью закрывается терминалом и открывается новый ордер с уменьшенным лотом, но другим тикетом