[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 326

 
drknn:


С постановки задачи.

- Распознать скриптом наличие линии на графике.

- Если линия существует, то вывести в переменные цену её начала и конца; вывести в переменные номера баров (или время).

- Программно произвести необходимые вычисления.

- Вывести результаты на экран (или в текстовый документ, или в журнал экспертов)

Если эти 4 задачи решить сходу не удастся, то начать следует с изучения языка.


drknn! спасибо! Буду разбираться!!!
 
Zhunko:

Не секрет. Тут много об этом понаписано. Не важно каким средством была создана история. Суть в обновлении графика, чтобы эксперт на нём работал.

Можно это сделать средствами WinAPI. Здесь это много раз описывалось. Я себе библиотеку написал. Здесь выложил.

В ней есть функции для управления автономномным обновлением графика. При этом не нужен никакой скрипт и эксперт. Но это не для всех. Там же есть доступные для всех функции для обновления графика из эксперта или скрипта или индикатора. Пользоваться ими сложнее. Потому, как надо будет придумать какая из Ваших программ будет обновлять график. Примеры есть в тестовом скрипте.

У Вас случайно нет готового решения "вычленения" последней строчки лог-файла для отображения в комментах?
 

Помогите нубу. Освежу суть вопроса.

Имеются две точки на графике, точка 2-та что ближе к нулевому бару и т.1 - та, что дальше от нулевого бара в историю. Пытаюсь строить трендовую линию от этих двух точек,

продолжив отрезок между этими точками на N (переменная int RayLong) интервалов вперед. Код следущ:

if (RayLong!=0 && point1s==true && point2s==true)
{
//расчет цены в будущем
if (price11s>price22s) {price11s=NormalizeDouble(price11s+((price11s-price22s)*RayLong),Digits);} 
if (price11s<price22s) {price11s=NormalizeDouble(price11s-((price22s-price11s)*RayLong),Digits);}
//расчет бара в будущем
int bis=iBarShift(Symbol(),0,time22s,true)-iBarShift(Symbol(),0,time11s,true);
Print("Sup "+iBarShift(Symbol(),0,time22s,true)+" "+iBarShift(Symbol(),0,time11s,true)+" "+bis+
" sec="+bis*Period()*60*NormalizeDouble(RayLong,Digits)+" Time="+TimeToStr(time11s+(Period()*60*
(iBarShift(Symbol(),0,time22s,true)-iBarShift(Symbol(),0,time11s,true)+1)*RayLong),TIME_DATE|TIME_SECONDS));
time11s=time11s+(Period()*60*((iBarShift(Symbol(),0,time22s,true)-iBarShift(Symbol(),0,time11s,true))*RayLong));
//time11s=time11s+((time11s-time22s)*RayLong); //альтернативный вариант предыдущей строки
}
Проблема - расчетная точка плывет по дате. По цене все ок. А вот по дате то нормально то плывет. Через Print пришел к выводу, что это происходит в случаях когда расчетной даты нет на графике - выходные или праздники. Подскажите решение проблемы плиз.
 
forexnew:
У Вас случайно нет готового решения "вычленения" последней строчки лог-файла для отображения в комментах?
Это бесполезно. Лог-файл заполняется после выгрузки МТ4 или, когда есть время у МТ4 на это.
 
ZZZEROXXX:

Помогите нубу. Освежу суть вопроса.

Имеются две точки на графике, точка 2-та что ближе к нулевому бару и т.1 - та, что дальше от нулевого бара в историю. Пытаюсь строить трендовую линию от этих двух точек,

продолжив отрезок между этими точками на N (переменная int RayLong) интервалов вперед. Код следущ:

Проблема - расчетная точка плывет по дате. По цене все ок. А вот по дате то нормально то плывет. Через Print пришел к выводу, что это происходит в случаях когда расчетной даты нет на графике - выходные или праздники. Подскажите решение проблемы плиз.

Проблемы не пойму... Если строите по цене и барам, то... ведь на графике нет баров выходных и нерабочих дней. Значит трендовая и должна продолжиться на следующие бары, соответствующие датам торговых дней.

Или у вас что-то иначе?

 

подскажите пожалуйста, будет ли заполняться массив тикетами отложенных ордеров в таком коде:

int tiket[];

int SetFunk()

{

for (i=0; i<=k-1; i++)

{
ticket[i]=OrderSend(Symbol(),OP_BUYSTOP,0.01*Lots,Ask+Step*i*Point,3,Bid-S_Loss*Point,0,"",10000,0,Green);

ticket[i+k]=OrderSend(Symbol(),OP_SELLSTOP,0.01*Lots,Bid-Step*i*Point,3,Ask+S_Loss*Point,0,"",10000,0,Green);

}

}

?????
при попытке вывести через Print() возвращаются нули

 
Для чего, нужен класс памяти - static? Если можно, то приведите хороший пример его применения в коде и подчеркните выделяющие его среди других классов памяти - особенности? Вроде эта штука - бесполезная, кто что знает?
 
myrzila:

подскажите пожалуйста, будет ли заполняться массив тикетами отложенных ордеров в таком коде:

int tiket[];

int SetFunk()

{

for (i=0; i<=k-1; i++)

{
ticket[i]=OrderSend(Symbol(),OP_BUYSTOP,0.01*Lots,Ask+Step*i*Point,3,Bid-S_Loss*Point,0,"",10000,0,Green);

ticket[i+k]=OrderSend(Symbol(),OP_SELLSTOP,0.01*Lots,Bid-Step*i*Point,3,Ask+S_Loss*Point,0,"",10000,0,Green);

}

}

?????
при попытке вывести через Print() возвращаются нули

сначала нужно задать размер массива (ArrayResize), а уже потом с ним работать
 

Здравствуйте.

Есть советник.

Как мне заставить его показывать уровни скользящей средней, показанные на картинке?

Сейчас он показывает просто нули.


//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
SetLabel("MA_LABEL",DoubleToStr(iMA(Symbol(),13,30,8,MODE_SMA,PRICE_CLOSE,0)-0.0015,0),Red,10,20,0,20);
SetLabel("MA_LABEL2",DoubleToStr(iMA(Symbol(),13,30,8,MODE_SMA,PRICE_CLOSE,0),0),Red,10,50,0,20);
//----
return(0);
}
//+------------------------------------------------------------------+


void SetLabel(string nm, string tx, color cl, int xd, int yd, int cr=0, int fs=9) {
if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_LABEL, 0, 0,0);
ObjectSetText(nm, tx, fs);
ObjectSet(nm, OBJPROP_COLOR, cl);
ObjectSet(nm, OBJPROP_XDISTANCE, xd);
ObjectSet(nm, OBJPROP_YDISTANCE, yd);
ObjectSet(nm, OBJPROP_CORNER, cr);
ObjectSet(nm, OBJPROP_FONTSIZE, fs);
}




 
emilien:


Здравствуйте.

Есть советник.

Как мне заставить его показывать уровни скользящей средней, показанные на картинке?

Сейчас он показывает просто нули.


//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
SetLabel("MA_LABEL",DoubleToStr(iMA(Symbol(),13,30,8,MODE_SMA,PRICE_CLOSE,0)-0.0015,0),Red,10,20,0,20);
SetLabel("MA_LABEL2",DoubleToStr(iMA(Symbol(),13,30,8,MODE_SMA,PRICE_CLOSE,0),0),Red,10,50,0,20);
//----
return(0);
}
//+------------------------------------------------------------------+


void SetLabel(string nm, string tx, color cl, int xd, int yd, int cr=0, int fs=9) {
if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_LABEL, 0, 0,0);
ObjectSetText(nm, tx, fs);
ObjectSet(nm, OBJPROP_COLOR, cl);
ObjectSet(nm, OBJPROP_XDISTANCE, xd);
ObjectSet(nm, OBJPROP_YDISTANCE, yd);
ObjectSet(nm, OBJPROP_CORNER, cr);
ObjectSet(nm, OBJPROP_FONTSIZE, fs);
}




double iMA( string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)

я про таймфрейм 13 пока не слышал

Причина обращения: