Yar1k писал(а) >>
ObjectCreate("His_Name",OBJ_TREND,0,T_Bar,H_Bar,T_Bar,L_Bar);
... закрашивет почему то только один бар(самый первый слева помоему), хотя по идее должен все на промежутке 100-0 баров. Подскажите пожайлуста где ошибка?
ObjectCreate("His_Name",OBJ_TREND,0,T_Bar,H_Bar,T_Bar,L_Bar);
... закрашивет почему то только один бар(самый первый слева помоему), хотя по идее должен все на промежутке 100-0 баров. Подскажите пожайлуста где ошибка?
У Вас ВСЕ объекты с одним и тем же именем - "His Name". Рисуются все - остается последний. Создайте уникальные имена объектов (например так : "His Name"+i)
Удачи.
Спасибо. Сделал так: ObjectCreate("His_Name"+Ind_Bar,OBJ_TREND,0,T_Bar,H_Bar,T_Bar,L_Bar); - теперь вроде нормально рисует.
Еще вопрос. Как изменить параметры линий(цвет,рисовать объект как фон, луч)?
Благодарю! Фсе зделал как хотел.
Сейчас следующей задачей озабочен: Как на MQL4 запрограммировать следующие условия(покупка)?-минимум предыдущего бара ниже МА(неважно какой), а минимум текущего бара выше МА(т.е. пересечение мувинга с закреплением над ним). Далее идентифицируем белый бар выше МА и размещаем над ним ордер. Если после пересечения МА условий для размещения ордера небыло и цена забралась обратно под мувинг(минимум бара<МА) ждем следующего пересечения снизу вверх.
Буду благодарен за помощь.
Буду благодарен за помощь.
При попытке компиляции выдает ошибку:
... все скобки вроде на месте(час проверял, ненашел). В чем проблема??
Сам эксперт:
#include <stdlib.mqh>
#include <stderror.mqh>
#define MAGICMA 200506100
extern double Lots = 0.1;
extern double MaximumRisk = 0.02;
extern double MovingPeriod = 12;
extern double MovingShift = 0;
extern double MovingPeriod1 = 4;
extern double AtrPer = 10;
int CalculateCurrentOrders(string symbol)
{
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
{
if(OrderType()==OP_BUY||OrderType()==OP_BUYSTOP)return(1);
if(OrderType()==OP_SELL||OrderType()==OP_SELLSTOP)return(2);
}
}
return(0);
}
void CheckForOpen()
{
double mas;
double maf;
double mas_p;
double maf_p;
double Atr;
int res;
double openBUY=High[1]+6*Point;
double openSELL=Low[1]-3*Point;
mas=iMA(NULL,0,MovingPeriod,MovingShift,MODE_EMA,PRICE_CLOSE,1); // динный мувинг 12
maf=iMA(NULL,0,MovingPeriod1,MovingShift,MODE_EMA,PRICE_CLOSE,1);// короткий мувинг 4
mas_p=iMA(NULL,0,MovingPeriod,MovingShift,MODE_EMA,PRICE_CLOSE,2); // динный мувинг 12
maf_p=iMA(NULL,0,MovingPeriod1,MovingShift,MODE_EMA,PRICE_CLOSE,2);// короткий мувинг 4
Atr = iATR(NULL,0,AtrPer,1);
if(maf<mas && maf_p>=mas_p)
{
res=OrderSend(Symbol(),OP_SELLSTOP,Lots,openSELL,3,Low[1]+(Atr+16*Point),Low[1]-Atr*11,"",MAGICMA,0,Red);
if (res!=-1)
return;
}
if(maf>mas && maf_p<=mas_p)
{
res=OrderSend(Symbol(),OP_BUYSTOP,Lots,openBUY,3,High[1]-(Atr+16*Point),High[1]+Atr*11,"",MAGICMA,0,Blue);
if (res!=-1)
return;
}
}
void CheckForCloseAndModifBUY()
{
double mas;
double maf;
double mas_p;
double maf_p;
bool rtvl;
bool rtv;
//----
mas=iMA(NULL,0,MovingPeriod,MovingShift,MODE_EMA,PRICE_CLOSE,1); // динный мувинг 12
maf=iMA(NULL,0,MovingPeriod1,MovingShift,MODE_EMA,PRICE_CLOSE,1);// короткий мувинг 4
mas_p=iMA(NULL,0,MovingPeriod,MovingShift,MODE_EMA,PRICE_CLOSE,2); // динный мувинг 12
maf_p=iMA(NULL,0,MovingPeriod1,MovingShift,MODE_EMA,PRICE_CLOSE,2);// короткий мувинг 4
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
//----
if(OrderType()==OP_BUY)
{
if((Bid-OrderOpenPrice())>=50*Point)
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Green);
if(maf<mas && maf_p>=mas_p) rtvl=OrderClose(OrderTicket(),OrderLots(),Bid,3,Lime);
if (rtvl!=False)
break;
}
if(OrderType()==OP_BUYSTOP)
if(maf<mas && maf_p>=mas_p)rtv=OrderDelete(OrderTicket(),Red)
}
}
void CheckForCloseAndModifSELL()
{
double mas;
double maf;
double mas_p;
double maf_p;
bool rtvl;
bool rtv;
mas=iMA(NULL,0,MovingPeriod,MovingShift,MODE_EMA,PRICE_CLOSE,1); // динный мувинг 12
maf=iMA(NULL,0,MovingPeriod1,MovingShift,MODE_EMA,PRICE_CLOSE,1);// короткий мувинг 4
mas_p=iMA(NULL,0,MovingPeriod,MovingShift,MODE_EMA,PRICE_CLOSE,2); // динный мувинг 12
maf_p=iMA(NULL,0,MovingPeriod1,MovingShift,MODE_EMA,PRICE_CLOSE,2);// короткий мувинг 4
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
if(OrderType()==OP_SELL)
{
if((OrderOpenPrice()-Bid)>=50*Point)
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Green);
if(maf>mas && maf_p<=mas_p)rtvl=OrderClose(OrderTicket(),OrderLots(),Ask,3,Lime);
}
if(OrderType()==OP_SELLSTOP)
{
if(maf>mas && maf_p<=mas_p)rtv=OrderDelete(OrderTicket(),Red)
}
}
}
void start()
{
//---- calculate open orders by current symbol
switch(CalculateCurrentOrders(Symbol()))
{
case 0 :CheckForOpen();break;
case 1 :CheckForCloseAndModifBUY();break;
case 2 :CheckForCloseAndModifSELL();break;
}
}
поставьте точку с запятой в конце в выражении if(maf>mas && maf_p<=mas_p)rtv=OrderDelete(OrderTicket(),Red); (два раза)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Пытаюсь научить МТ4 выделять на графике бары диапазон которых превышает ATR(60), код следующий:
extern int Quant_Bars=100; // Количество баров
int start()
{
int Ind_Bar;
for(Ind_Bar=Quant_Bars-1; Ind_Bar>=0; Ind_Bar--)
{
Create(Ind_Bar);
}
return;
}
//--------------------------------------------------------------- 3 --
int Create(int Ind_Bar) // Пользовательская функция создания объекта
{
color Color= Red; // Цвет объекта
datetime T_Bar=Time [Ind_Bar]; // Время открытия бара
double O_Bar=Open [Ind_Bar]; // Цена открытия бара
double C_Bar=Close[Ind_Bar]; // Цена закрытия бара
double H_Bar=High [Ind_Bar]; // Максимальная цена бара
double L_Bar=Low [Ind_Bar]; // Минимальная цена бара
double A= iATR(Symbol(),0,60,Ind_Bar);
if((H_Bar-L_Bar)>A)
ObjectCreate("His_Name",OBJ_TREND,0,T_Bar,H_Bar,T_Bar,L_Bar);
return;
}
... закрашивет почему то только один бар(самый первый слева помоему), хотя по идее должен все на промежутке 100-0 баров. Подскажите пожайлуста где ошибка?
И еще, объясните пожайлусто как вставлять в посты коды, выделящиеся цветом.