[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 35
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
double get_extrem(int n) {
for(int i=1;;i++) {
double ind=iCustom(Symbol(),0,"indicator_name",0,i);
if(n>1)
if(ind!=0) n--;
else
if(ind!=0) return(ind);
}
}
вот так. функции отдаешь n (номер пика) она тебе вернет его значение. если тебе нужен номер бара пика то поменять тип функции на int и вместо return(ind); напиши return(i);
Я вот думаю на этим на данный момент. У меня все функции типа double и int всегда возвращают канкретные фиксированные значения. Например, 1, 0, -1 а в данном случае условие нужно производить с данной функцией не так как я до этого делал, типа:
В данном случает, придётся сравнивать, например, для 3 колена:
Так разве логично писать? Может резоннее этой ф-ции тип bool задать? Мол: если нашли третье колено, то по цене (ниже или выше ind) покупаем или продаём. вроде бы я понятно изъяснил мысль.
А в данном случает мы сравниваем функцию с её параметров n-коленом с ценой на этом колене, и что дальше?
Я вот думаю на этим на данный момент. У меня все функции типа double и int всегда возвращают канкретные фиксированные значения. Например, 1, 0, -1 а в данном случае условие нужно производить с данной функцией не так как я до этого делал, типа:
В данном случает, придётся сравнивать, например, для 3 колена:
Так разве логично писать? Может резоннее этой ф-ции тип bool задать? Мол: если нашли третье колено, то по цене (ниже или выше ind) покупаем или продаём. вроде бы я понятно изъяснил мысль.
А в данном случает мы сравниваем функцию с её параметров n-коленом с ценой на этом колене, и что дальше?
Double ind может возвратимть и -2, и -3 и так далее и даже Пи 3.14159......
А в данном случает мы сравниваем функцию с её параметров n-коленом с ценой на этом колене, и что дальше? Не совсем понятно....
Я вот думаю на этим на данный момент. У меня все функции типа double и int всегда возвращают канкретные фиксированные значения. Например, 1, 0, -1 а в данном случае условие нужно производить с данной функцией не так как я до этого делал, типа:
В данном случает, придётся сравнивать, например, для 3 колена:
Так разве логично писать? Может резоннее этой ф-ции тип bool задать? Мол: если нашли третье колено, то по цене (ниже или выше ind) покупаем или продаём. вроде бы я понятно изъяснил мысль.
А в данном случает мы сравниваем функцию с её параметров n-коленом с ценой на этом колене, и что дальше?
Ну нет, попробуйте поэксперемитируйте...... фигня все это......
Double ind может возвратимть и -2, и -3 и так далее и даже Пи 3.14159......
А в данном случает мы сравниваем функцию с её параметров n-коленом с ценой на этом колене, и что дальше?
С чего бы это вдруг? Double ind вернёт число дробное..., а -2, -3 .. это целые. И как я понимаю, Double ind это цена на занном в параметре функции get_extrem(int n)
Ну этот сайт не ради торговли... Он главным образом посвящен программированию на MQL. Если обращали внимание во многих кодах даже предупреждают "Не для реальной торговли".
И где тот проф. который торгует как проф. А если админы такой способ узнали, я думаю они бы не заморачивались поддержкой сайта...)))
Как в стенку горох ).
Нужен пример правильной покупки, в любой по случайности выбранный период времени.
Да пишут не для реальной торговли.. И что, и почему?
Почему не покажут пример для реальной торговли, без оглашения стратегии.
Или правильного примера нет впринципе.
Добрый день. Подскажите, как советнику получить параметр Hi-Lo(амплитуда) Heiken Ashi(HA) из соответствующего индикатора . Попробовал разобраться с глобальными переменными, но что-то туго. В код HA встроил получение таким образом
int start()
{
double haOpen, haHigh, haLow, haClose,pip;
...
GlobalVariableGet(pip);
...(здесь стандартный код с расчетом HA)
далее идет получение параметров Hi-Lo свечек HA
result2=MathMin(ExtMapBuffer3[pos+1],ExtMapBuffer4[pos+1]);
result22=MathMax(ExtMapBuffer3[pos+1],ExtMapBuffer4[pos+1]);
result3=MathMin(Low[pos+1],result2);
result33=MathMax(High[pos+1],result22);
result0=result33-result3; \\расчет амплитуды НА
GlobalVariableSet(pip,result0); \\присвоение глоб.пер. pip значения амплитуды
pos--;
}
//----
return(0);
}
Потом в советнике в формулу просто вставляю GlobalVariableGet(pip), но что-то совсем не то получается, т.е. значение pip совсем не то, чо должно быть. Подскажите что не так. Или может как проще получить амплитуду HA для оперирования советником.
Необходимо, чтобы несколько советников на одном счету, открывали ограниченное количество ордеров.
К примеру: 10 советников но открыть можно только 5 ордеров, но не более одного на валютную пару.
Реализовано это следующим образом, но работает не так.
extern int МаксКолОрдеров = 5;
//+------------------------------------------------------------------+
int ПодсчетОткрОрдеров() {
int k=OrdersTotal();
if (Символ=="0") Символ=Symbol();
for (int i=МаксКолОрдеров; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Символ || Символ=="") {
if (МагикНомер<0 || OrderMagicNumber()==МагикНомер) {
if (OrderMagicNumber()<1) return(True);
}
}
}
}
return;
}
//+------------------------------------------------------------------+
int start()
{
if(ПодсчетОткрОрдеров()==0)ПровТоргУсловий();
}
1. Мне выше, подсказали про глобальные переменные, спасибо. Читаю документацию.А в вашем варианте, как сделано ?
2. Мне нужно, что бы после достижения прибыли,Советник больше в рынок не входил, до ручного подтверждения разрешения на торговлю.
1. Отслеживается уровень профита на каждом баре. При его превышении заданного процента от размера дЕпа все сделки закрываются.
2. См. и правьте этот эксперт, добавляя фильтр по магику и всему, что Вам нужно...
Помогите дописать код. Попытался написать код, из которого следует:
-если МА50 пересекает МА200 снизу вверх и после этого
-если цена опускается до МА50
-на графике рисуются две линии, поддержка и сопротивление (рисуются за последние 15 баров);
Это как бы все работает, но не могу добиться того, что бы эти линии появившись первый раз, потом оставались на месте, это нужно по алгоритму торговли.(а они продолжают и дальше рисоваться).
Может их как -то привязать ко времени или к бару?
Вот код. Что нужно добавить?
#property copyright "Copyright © 2012, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
bool Fact_1 = false; // Глобальная перемен для бай.
bool Fact_2 = false; // Глобальная перемен для бай
bool Fact_3 = false; // Глобальная перемен для бай
double support;
double resist;
int timeFrame = 5;
int numBars = 15;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
ObjectsDeleteAll();
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
//---------------------------------------------------------------------------
if (Fact_3==true) //Если событие уже..
//..было, то выходим
return(0);
//----
//---- БЛОК ОТКРЫТИЯ BUY--------------------------------------------------------------
if (iMA(NULL,PERIOD_M5,50,0,MODE_EMA,PRICE_CLOSE,2)<iMA(NULL,PERIOD_M5,200,0,MODE_EMA,PRICE_CLOSE,0)&&
iMA(NULL,PERIOD_M5,50,0,MODE_EMA,PRICE_CLOSE,1)>=iMA(NULL,PERIOD_M5,200,0,MODE_EMA,PRICE_CLOSE,0))//если МА50 пересекает МА200 снизу вверх по M5
Fact_1 = true; // Произошло событие 1
//-
if (Fact_1 == true && Low[0]<= iMA(NULL,PERIOD_M5,50,0,MODE_EMA,PRICE_CLOSE,0))//если цена опустилась до МА50
Fact_2 = true; // Произошло событие 2
if (Fact_2 == true)
{
// Определяем линии поддержки\сопротивления
support = 10000;
resist = 0;
for(int u = 1;u<=numBars;u++)
{
if(support>iLow(Symbol(),timeFrame,u))
support = iLow(Symbol(),timeFrame,u);
if(resist<iHigh(Symbol(),timeFrame,u))
resist = iHigh(Symbol(),timeFrame,u);
}
ObjectSet("lineSupport",OBJPROP_PRICE1,support);
ObjectSet("lineResist",OBJPROP_PRICE1,resist);
}
//----
{
ObjectCreate("lineSupport",OBJ_HLINE,0,0,0);
ObjectSet("lineSupport",OBJPROP_COLOR,Blue);
ObjectCreate("lineResist",OBJ_HLINE,0,0,0);
ObjectSet("lineResist",OBJPROP_COLOR,Red);
}
//----
//что сюда добавить что бы линии появившись, оставались на месте?
//----
return(0);
}
Что будет, что может быть если
покупать, продавать без указания на зазор для проскальзывания.Обычно +- 2 пункта ставят.
В ответ реквота.
А если, значение проскальзывания не ставить, получиться гарантировано купить?