На данный момент задача такая: fastMa пересекла slowMa вверх... значит мы ищем где купить. Далее ждём когда цена т.е. Ask (т.к. рассматриваем покупки) дойдёт до fastMa (ну я так понимаю точное значение тут не будет, нужен +- какое-то отклонение, а это переенная i_thresholdFromMa) и как только цена подошла к fastMa +- i_thresholdFromMaэксперт должен выставить BUYSTOP по цене (fastMa + buyHear * pt).
То что у меня вышло в одном терминале не работало, в другом работало, в третьем работает не всегда. В общем что-то не то..
Последний вариант функции покупки вот:
Вот входные параметры:
Ошибки на скрине видны (в OrderSend() подаётся цена выше красной машки, а ордер как видно на скрине - ниже....):
Несколько дней отсутствовал... Я вот думаю - а те же параметры имеют машки, накинутые на график, что и машки, использующиеся в вычислениях? Может собака там порылась?
(В код до сих пор некогда было вникать и разбирать).
Я бы сделал функцию, например:
//-----------------------------------------------------------------------------+double ma(int MAperiod, int MAmethod, int MAshift) {return (iMA(Symbol(), Period(), MAperiod, 0, MAmethod, PRICE_OPEN,MAshift));}
//-----------------------------------------------------------------------------+
а если так, сигнал сработал ждем подтверждение, только после сигала 2 бара вверх или вниз.
Надо, чтоб он как то запомнил бар на сигнале, бар после сигнала, сравнил их если два восходящих или нисходящих,то ....
if (bay_min == true) datetime T=Time[0] //сработал сигнал на покупку запоминаем время бараif(iBarShift(NULL,0,T)==2) //по времени, сигнал был на 2 баре
{
if (Open[1]<Close[1] && Open[2]<Close[2] ) //и эти бары бичьи
{
// что-то делаем
}
}
// я думаю, как-то так.
Что у меня получилось, отрисовывается значок, но только один раз, а нужно что бы каждый раз.
Цена закрытия бара не совпадает с ценой Startprice расхождения в 0.00001 почему и как с этим бороться?
Пробывал округления и обрезание до 5-ти знаков не помогло(
В журнале с помощью принта вызываю значение Startprice, показывается число только до 4-х знаков и меньше.
Как добиться такой же точности как в окне данных терминала?
Эта трабла со знаками после запятой относиться и к самой скользящей. Если вызывать её значения через принт, то больше 4-х знаков не получается в журнале.
#property copyright "Zuly"externint MA_Period = 50; //периуд Маexternint MA_Method =MODE_SMA; //Метод усреднения скользящего среднего. Может быть любым из значений методов скользящего среднего (Moving Average)://*MODE_SMA externint Maximum_History = 0; //Ограничение истории для расчетов, если 0 то расчет всей истории//начало кода советникаint start()
{
double MA4; // Значение МА на 4 баре double Startprice;
{
MA4=iMA(NULL,0,MA_Period,0,MA_Method,PRICE_CLOSE,4);
if (Low[4]< MA4 && MA4 < High[4]) //условия если 4-я свеча лежит в скользящей
{
Startprice=Close[0];
// Startprice=NormalizeDouble(Close[0],5); // пробуем округлить до 5-го знака, не помогло // Startprice=MathFloor(Close[0]*100000)/100000; // пробуем обрезать до 5-го знака не помогло//Print (Startprice); // распечатаем Startpricedatetime TmR1=Time[0]; // запоминаем время текущего бара? ObjectCreate("Rep1",OBJ_ARROW, 0, TmR1, Startprice); // создаем обьект
ObjectSet("Rep1", OBJPROP_COLOR, White); // устанавливаем обьект на график
ObjectSet("Rep1", OBJPROP_ARROWCODE,71);
return(0);
}} }
Используйте для вывода DoubleToStr(число, Digits). Вместо Digits можно вписать нужную вам точность. К имени значка добавьте время бара, на котором устанавливаете значок.
artmedia70: Используйте для вывода DoubleToStr(число, Digits). Вместо Digits можно вписать нужную вам точность. К имени значка добавьте время бара, на котором устанавливаете значок.
если так
Startprice=DoubleToStr(Close[0],5);
то не работает, ругается на '=' - incompatible types C:\fortest\experts\sve.mq4 (34, 14)
Как правильно это можно записать?
Спасибо что ответили, я над этим уже неделю бьюсь )
artmedia70: Используйте для вывода DoubleToStr(число, Digits). Вместо Digits можно вписать нужную вам точность. К имени значка добавьте время бара, на котором устанавливаете значок.
а для вывода, понял принт выдаёт только всегда 4-ре и меньше знака.
тогда если Print (DoubleToStr(Startprice,5)); // распечатаем Startprice
На данный момент задача такая: fastMa пересекла slowMa вверх... значит мы ищем где купить. Далее ждём когда цена т.е. Ask (т.к. рассматриваем покупки) дойдёт до fastMa (ну я так понимаю точное значение тут не будет, нужен +- какое-то отклонение, а это переенная i_thresholdFromMa) и как только цена подошла к fastMa +- i_thresholdFromMa эксперт должен выставить BUYSTOP по цене (fastMa + buyHear * pt).
То что у меня вышло в одном терминале не работало, в другом работало, в третьем работает не всегда. В общем что-то не то..
Последний вариант функции покупки вот:
Вот входные параметры:Ошибки на скрине видны (в OrderSend() подаётся цена выше красной машки, а ордер как видно на скрине - ниже....):
Несколько дней отсутствовал... Я вот думаю - а те же параметры имеют машки, накинутые на график, что и машки, использующиеся в вычислениях? Может собака там порылась?
(В код до сих пор некогда было вникать и разбирать).
Я бы сделал функцию, например:
и вызывал её для получения параметров
Здравствуйте, подскажите пожалуйста! Сработал сигнал индикатора на покупку, открываю ордер только после, подтверждения, двух следующих свечей вверх.
Здравствуйте, подскажите пожалуйста! Сработал сигнал индикатора на покупку, открываю ордер только после, подтверждения, двух следующих свечей вверх.
Так и проверяйте, чтобы одновременно было две последних свечи вверх и условие на открытие ордера два бара назад.
Так и проверяйте, чтобы одновременно было две последних свечи вверх и условие на открытие ордера два бара назад.
это как сделать?
а если так, сигнал сработал ждем подтверждение, только после сигала 2 бара вверх или вниз.
Надо, чтоб он как то запомнил бар на сигнале, бар после сигнала, сравнил их если два восходящих или нисходящих,то ....
это как сделать?
а если так, сигнал сработал ждем подтверждение, только после сигала 2 бара вверх или вниз.
Надо, чтоб он как то запомнил бар на сигнале, бар после сигнала, сравнил их если два восходящих или нисходящих,то ....
это как сделать?
а если так, сигнал сработал ждем подтверждение, только после сигала 2 бара вверх или вниз.
Надо, чтоб он как то запомнил бар на сигнале, бар после сигнала, сравнил их если два восходящих или нисходящих,то ....
Пишу простенького советника, сразу же столкнулся с массой проблем.
условие
Запомнить цену закрытия текущего бара внести её в переменную Startprice, если предыдцщий 4-й бар лежал в скользящей.
Если условие удовлетворено отрисовать значёк показывающий цену закрытия бара, т.е Startprice.
Что у меня получилось, отрисовывается значок, но только один раз, а нужно что бы каждый раз.
Цена закрытия бара не совпадает с ценой Startprice расхождения в 0.00001 почему и как с этим бороться?
Пробывал округления и обрезание до 5-ти знаков не помогло(
В журнале с помощью принта вызываю значение Startprice, показывается число только до 4-х знаков и меньше.
Как добиться такой же точности как в окне данных терминала?
Эта трабла со знаками после запятой относиться и к самой скользящей. Если вызывать её значения через принт, то больше 4-х знаков не получается в журнале.
Используйте для вывода DoubleToStr(число, Digits). Вместо Digits можно вписать нужную вам точность. К имени значка добавьте время бара, на котором устанавливаете значок.
если так
то не работает, ругается на '=' - incompatible types C:\fortest\experts\sve.mq4 (34, 14)
Как правильно это можно записать?
Спасибо что ответили, я над этим уже неделю бьюсь )
Используйте для вывода DoubleToStr(число, Digits). Вместо Digits можно вписать нужную вам точность. К имени значка добавьте время бара, на котором устанавливаете значок.
а для вывода, понял принт выдаёт только всегда 4-ре и меньше знака.
тогда если Print (DoubleToStr(Startprice,5)); // распечатаем Startprice
то выдаёт 5.
Но вот как время бара добавить
Это строка не добавляет время бара?