Forexman77: Нужно, конечно! Ну, как применить данную конструкцию к поиску минимума? Пораскинув мозгами у меня не получается)
Для поиска максимума переменной val присваивается значение 0 (заведомо меньшее значение, чем любое из значений индиктаора).
Значит для поиска минимума надо присовоить заведомо большее значение. Можно использовать константу EMPTY_VALUE или непосредственно значение индикатора на каком-нибудь баре среди которых выполняется поиск минимума.
Нужно, конечно! Ну, как применить данную конструкцию к поиску минимума? Пораскинув мозгами у меня не получается) Да и объявлять массив научиться хочу. Попробовал так:
Выходит -1.
Цикл перебирает 34 значения, а массив содержит только 33 ячейки, исправьте.
И попробуйте всё же ArrayMinimum(num_array,WHOLE_ARRAY,0);
Для поиска максимума переменной val присваивается значение 0 (заведомо меньшее значение, чем любое из значений индиктаора).
Значит для поиска минимума надо присовоить заведомо большее значение. Можно использовать константу EMPTY_VALUE или непосредственно значение индикатора на каком-нибудь баре среди которых выполняется поиск минимума.
#property strict#include <Indicators\Trend.mqh>
bool ind;
CiMA MA;
externint pos=1;
externint sl=40;
externint tp=70;
datetime time;
datetime time2;
bool trade=false;
bool trade2=false;
int a,b;
intOnInit()
{
//---
MA.Create(Symbol(),PERIOD_CURRENT,10,6,MODE_EMA,PRICE_CLOSE);//создал машку//---return(INIT_SUCCEEDED);
}
voidOnTick()
{
//---if(IsNewBar()==true)//если новый бар включаемся
{
if(buy(pos)==true)//если цена выше МА продолжаем
{
if(!ExistPositions(Symbol(),-1,-1,0))//если нету открых ордеров продолжаем
{
if(GetTypeLastClosePos(Symbol(),-1)!=OP_BUY)//если тип последней закрытой позиции был не на покупку то тогда только покупаем таким образом я пред остерегаюсь от повторных входов в покупку если цена //все ещо выше МА...но почему то не работает открываются и дальше сделки на покупку если ордер закрылся выше МА....ХОТЯ НЕ ДОЛЖО ТАК КАК Я ОГРАНИЧИЛ ПО ТИПУ ПОЗИЦИИ ПОСЛЕДНЮЮ СДЕЛКУ И ОНИ ДОЛЖНЫ ТОЛЬКО // ЧЕРЕДОВАТСЯ И УЖ НИ КАК НЕ ПОВТОРЯТСЯ ПО НЕСКОЛЬКО РАЗ ПОДРЯД
{
trade=true;
}
if(trade==true)
{
OpenPosition(Symbol(),OP_BUY,0.1,Ask-sl*Point,Ask+tp*Point);
trade=false;
}
}
}
if(sell(pos)==true)
{
if(!ExistPositions(Symbol(),-1,-1,0))
{
if(GetTypeLastClosePos(Symbol(),-1)!=OP_SELL)
{
trade2=true;
}
if(trade2==true)
{
OpenPosition(Symbol(),OP_SELL,0.1,Bid+sl*Point,Bid-tp*Point);
trade=false;
}
}}
}
}
//возвращает истину если закрытие бара с указаной позицией выше МАbool buy(int pos)
{
if(iClose(Symbol(),0,pos)>MA.Main(1))
returntrue;
elsereturnfalse;
}
//+------------------------------------------------------------------+//| возвращает истину если закрытие бара с указаной позицией ниже МА//+------------------------------------------------------------------+bool sell(int pos)
{
if(iClose(Symbol(),0,pos)<MA.Main(1))
returntrue;
elsereturnfalse;
}
ВСЕ ФУНКЦИИ кроме двох условий на покупку и продажу взяты из ветки кима......подскажите пожалуйста где ошибся...нужно чтобы одна сделка по одному пересечению
А вот в вопросе мало инфы. В месяце много экстремумов на часовых барах. И, кстати, экстремума чего именно?
Я так предполагал, что экстремумов месячных всего два - min и max... ну да бог с ними, сначала длинный код получался, поэтому помощи просил... но озарило, вместился в четыре строки.
Нужно, конечно! Ну, как применить данную конструкцию к поиску минимума? Пораскинув мозгами у меня не получается)
Для поиска максимума переменной val присваивается значение 0 (заведомо меньшее значение, чем любое из значений индиктаора).
Значит для поиска минимума надо присовоить заведомо большее значение. Можно использовать константу EMPTY_VALUE или непосредственно значение индикатора на каком-нибудь баре среди которых выполняется поиск минимума.
Или так:
Нужно, конечно! Ну, как применить данную конструкцию к поиску минимума? Пораскинув мозгами у меня не получается)
Выходит -1.Да и объявлять массив научиться хочу. Попробовал так:
Цикл перебирает 34 значения, а массив содержит только 33 ячейки, исправьте.
И попробуйте всё же ArrayMinimum(num_array,WHOLE_ARRAY,0);
... Да и объявлять массив научиться хочу...
Если просто для тренировки и с познавательной целью...
Период на котором определяется минимум и максимуму - это должен быть внешний параметр для обеcпечения возможности настройки и оптимизации.
Значит сначала массив объявляется без размера:
double val[];Объявление массива делается в общей секции, а не в функции.
В функции init массиву устанавливается размер:
Теперь в функции start заполняем массив:
Наконец к массиву применяем ArrayMaximum() и ArrayMinimum().
Для поиска максимума переменной val присваивается значение 0 (заведомо меньшее значение, чем любое из значений индиктаора).
Значит для поиска минимума надо присовоить заведомо большее значение. Можно использовать константу EMPTY_VALUE или непосредственно значение индикатора на каком-нибудь баре среди которых выполняется поиск минимума.
Или так:
Цикл перебирает 34 значения, а массив содержит только 33 ячейки, исправьте.
И попробуйте всё же ArrayMinimum(num_array,WHOLE_ARRAY,0);
Дорогие товарищи программисты! У меня беда, помогите пожалуйста.
Совсем уже голову сломал об этот код.
Вот вся функция:
Доходит до Print и вот что он выдает:
В то время как тикет: 225299700 является тикетом ордера OP_SELLLIMIT.
И дальше все как положено модифицирует стоплосс этого выбранного ордера. А OP_BUY в упор не видит, хотя они конечно же есть:
В чем может быть проблема? За что он так со мной? Помогите разобраться пожалуйста!
ещо вопрос по поводу функции
как сделать чтобы прямоугольник рисовался наперед а не назад к примеру на пять баров вперед по указаной цене ......и не перерисовывался
Глянул. Спасибо.
А вот в вопросе мало инфы. В месяце много экстремумов на часовых барах. И, кстати, экстремума чего именно?