ДоброгоДоброго времени суток.
добавь в код нужную картинку в bmp форматекак сделать такое лого?
#resource "\\Images\\__________.bmp"
uint BMP[];
int width, height;
ResourceReadImage("::Images\\__________.bmp",BMP,width,height);
ResourceCreate("::__________",BMP,width,height,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE);
функцией ChartGetInteger() получи высоту и ширину графика в пикселях (раздели их на 2 ), а объекту с картинкой укажи точку привязки по центрупри запуске робота оно всегда появляется в центре, какой бы ширины и высоты окно графика не было.
это не единственный вариантразложи её на точки
обычную картинку я могу вставить, примерно так:Доброго
добавь в код нужную картинку в bmp формате
в OnInit() разложи её на точкиC-подобный:#resource "\\Images\\__________.bmp"
далее этим точкам задай уровень прозрачности функцией ColorToARGB,C-подобный:uint BMP[]; int width, height; ResourceReadImage("::Images\\__________.bmp",BMP,width,height);
этим конечно не обязательно ограничиваться ,
можно например:
фон картинки сделать полностью прозрачным, а основное изображение полупрозрачным.
или заменить один цвет на другой.
в большинстве случаев для этого придётся подготовить картинку хотя бы в Paint.
далее собери получившийся массив обратно в картинку
и уже это название картинки "::__________" используй дальше по кодуC-подобный:ResourceCreate("::__________",BMP,width,height,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE);
функцией ChartGetInteger() получи высоту и ширину графика в пикселях (раздели их на 2 ), а объекту с картинкой укажи точку привязки по центру
#resource "Icon30.bmp"
//-----------------------
string Icon = "::Icon30.bmp";
ObjectCreate(0,"label_object8",OBJ_BITMAP_LABEL,0,0,0);
ObjectSetString(0,"label_object8",OBJPROP_BMPFILE,Icon);
ObjectSetInteger(0,"label_object8", OBJPROP_XDISTANCE, 159);
ObjectSetInteger(0,"label_object8", OBJPROP_YDISTANCE, 17);
я уже почти всё написалНе могли бы Вы какой-то собранный пример набросать(в коде) того, что описали? Я попробую осилить)
for(int i=ArraySize(BMP)-1; i>=0; i--)
BMP[i] = ColorToARGB(BMP[i],99);
я своё участие в этой ветке вижу таким какое оно естьно то, о чем Вы написали, я уже не осилю, в силу отсутствия наличия достаточных знаний)))
double in[4][31];//Значения разных индикаторов
/********************************************************
void OnTick()
{
st1(fl(),sw(),ST(),PT());
}
/********************************************************
void uo(double &gh1[4][31])
{
for(int j =0; j<ArrayRange(gh1,1); j++)
{
gh1[0][j] =High[j];//Максимальная цена
gh1[1][j] =Low[j];//Минимальная цена
gh1[2][j] =Open[j];//Цена открытия
gh1[3][j] =Close[j];//Цена закрытия
}
}
/*************************************************
void st1(double Flot,string swop,double sl,double pt)
{
uo(in);
Comment(NormalizeDouble(in[3][4],5),"=",Time[4]);
}
Нужно преобразовывать время в строку TimeToStringКод:double in[4][31];//Значения разных индикаторов /******************************************************** void OnTick() { st1(fl(),sw(),ST(),PT()); } /******************************************************** void uo(double &gh1[4][31]) { for(int j =0; j<ArrayRange(gh1,1); j++) { gh1[0][j] =High[j];//Максимальная цена gh1[1][j] =Low[j];//Минимальная цена gh1[2][j] =Open[j];//Цена открытия gh1[3][j] =Close[j];//Цена закрытия } } /************************************************* void st1(double Flot,string swop,double sl,double pt) { uo(in); Comment(NormalizeDouble(in[3][4],5),"=",Time[4]); }
Как получить значение даты для in[3][4]. При таком выдает 1970 год и т д
Оновной момент то точто дата сама неверная по факту 26.12.2003, а показывает 1970.01.01Нужно преобразовывать время в строку TimeToString
enum stopi
{
t0,// Без стопов
t1,//Фиксированные стопы
t2//Минимальные стопы
};
enum profiti
{
n0,//Без профитов
n1,//Фиксированные профиты
n2//Минимальные профиты
};
/********************************************
sinput stopi Stop = 0;//Способ установки стопов
sinput profiti Profit = 0;//Способ установки профитов
/***********************************************
void OnTick()
{
if(OrdersTotal()==0)
st1(fl(),sw(),ST(),PT());
}
/**********************************************
double ST()
{
double sl =0.0;
int Magic =456789;
uy(fiks);
switch(Stop)//enum список
{
case 0://Торгуем без стопов
if(OrdersTotal()>0)
{
for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
{
if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
{
switch(OrderType())
{
case 0:
Print("NO");
break;
case 1:
Print("no");
break;
}
}
}
}
break;
case 1://Фиксированные стопы
if(OrdersTotal()>0)
{
for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
{
if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
{
switch(OrderType())
{
case 0:
sl=fiks[10];
break;
case 1:
sl=fiks[11];
break;
}
}
}
}
break;
case 2://Минимальные стопы
if(OrdersTotal()>0)
{
for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
{
if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
{
switch(OrderType())
{
case 0:
sl=fiks[12];
break;
case 1:
sl=fiks[13];
break;
}
}
}
}
break;
}
return(sl);
}
//+------------------------------------------------------------------+
double PT()
{
double pt =0.0;
int Magic =456789;
uy(fiks);
switch(Profit)//enum список
{
case 0://Торгуем без стопов
if(OrdersTotal()>0)
{
for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
{
if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
{
switch(OrderType())
{
case 0:
Print("NO2");
break;
case 1:
Print("no2");
break;
}
}
}
}
break;
case 1://Фиксированные профиты
if(OrdersTotal()>0)
{
for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
{
if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
{
switch(OrderType())
{
case 0:
pt=fiks[14];
break;
case 1:
pt=fiks[15];
break;
}
}
}
}
break;
case 2://Минимальные профиты
if(OrdersTotal()>0)
{
for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
{
if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
{
switch(OrderType())
{
case 0:
pt=fiks[16];
break;
case 1:
pt=fiks[17];
break;
}
}
}
}
break;
}
return(pt);
}
//+------------------------------------------------------------------+
void OrderModifi(double sl,double pt)
{
for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
{
int ticketss;
int Magic = 456789;
uy(fiks);
if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
{
switch(OrderType())
{
case 0:
if(OrderStopLoss()==0 && OrderTakeProfit()==0)
{
if((OrderOpenPrice()>sl && OrderStopLoss()!= sl) || (OrderOpenPrice()<pt && OrderTakeProfit()!=pt))
ticketss = OrderModify(OrderTicket(),OrderOpenPrice(),sl,pt,0,clrYellow);
break;
}
case 1:
if(OrderStopLoss()==0 && OrderTakeProfit()==0)
{
if((OrderOpenPrice()<sl && OrderStopLoss()!= sl) || (OrderOpenPrice()>pt && OrderTakeProfit()!=pt))
ticketss = OrderModify(OrderTicket(),OrderOpenPrice(),sl,pt,0,clrWhite);
break;
}
}
}
}
}
//+------------------------------------------------------------------+
void st1(double Flot,string swop,double sl,double pt)
{
uo(in);
int ticketss;
if(in[1][1]>in[1][2])
{
ticketss=OrderSend(Symbol(),OP_BUY,Flot,Ask,Slippage,sl,pt,"S1",456789,clrNONE);
OrderModifi(ST(),PT());
}
else
if(in[1][1]<in[1][2])
{
ticketss=OrderSend(Symbol(),OP_SELL,Flot,Bid,Slippage,sl,pt,"S1",456789,clrNONE);
OrderModifi(ST(),PT());
}
}
//+------------------------------------------------------------------+
OrderModifi(ST(),PT());
Потому что модификацию ордеров выполняет функция OrderModify().Код:enum stopi { t0,// Без стопов t1,//Фиксированные стопы t2//Минимальные стопы }; enum profiti { n0,//Без профитов n1,//Фиксированные профиты n2//Минимальные профиты }; /******************************************** sinput stopi Stop = 0;//Способ установки стопов sinput profiti Profit = 0;//Способ установки профитов /*********************************************** void OnTick() { if(OrdersTotal()==0) st1(fl(),sw(),ST(),PT()); } /********************************************** double ST() { double sl =0.0; int Magic =456789; uy(fiks); switch(Stop)//enum список { case 0://Торгуем без стопов if(OrdersTotal()>0) { for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории { if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер { switch(OrderType()) { case 0: Print("NO"); break; case 1: Print("no"); break; } } } } break; case 1://Фиксированные стопы if(OrdersTotal()>0) { for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории { if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер { switch(OrderType()) { case 0: sl=fiks[10]; break; case 1: sl=fiks[11]; break; } } } } break; case 2://Минимальные стопы if(OrdersTotal()>0) { for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории { if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер { switch(OrderType()) { case 0: sl=fiks[12]; break; case 1: sl=fiks[13]; break; } } } } break; } return(sl); } //+------------------------------------------------------------------+ double PT() { double pt =0.0; int Magic =456789; uy(fiks); switch(Profit)//enum список { case 0://Торгуем без стопов if(OrdersTotal()>0) { for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории { if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер { switch(OrderType()) { case 0: Print("NO2"); break; case 1: Print("no2"); break; } } } } break; case 1://Фиксированные профиты if(OrdersTotal()>0) { for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории { if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер { switch(OrderType()) { case 0: pt=fiks[14]; break; case 1: pt=fiks[15]; break; } } } } break; case 2://Минимальные профиты if(OrdersTotal()>0) { for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории { if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер { switch(OrderType()) { case 0: pt=fiks[16]; break; case 1: pt=fiks[17]; break; } } } } break; } return(pt); } //+------------------------------------------------------------------+ void OrderModifi(double sl,double pt) { for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории { int ticketss; int Magic = 456789; uy(fiks); if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер { switch(OrderType()) { case 0: if(OrderStopLoss()==0 && OrderTakeProfit()==0) { if((OrderOpenPrice()>sl && OrderStopLoss()!= sl) || (OrderOpenPrice()<pt && OrderTakeProfit()!=pt)) ticketss = OrderModify(OrderTicket(),OrderOpenPrice(),sl,pt,0,clrYellow); break; } case 1: if(OrderStopLoss()==0 && OrderTakeProfit()==0) { if((OrderOpenPrice()<sl && OrderStopLoss()!= sl) || (OrderOpenPrice()>pt && OrderTakeProfit()!=pt)) ticketss = OrderModify(OrderTicket(),OrderOpenPrice(),sl,pt,0,clrWhite); break; } } } } } //+------------------------------------------------------------------+ void st1(double Flot,string swop,double sl,double pt) { uo(in); int ticketss; if(in[1][1]>in[1][2]) { ticketss=OrderSend(Symbol(),OP_BUY,Flot,Ask,Slippage,sl,pt,"S1",456789,clrNONE); OrderModifi(ST(),PT()); } else if(in[1][1]<in[1][2]) { ticketss=OrderSend(Symbol(),OP_SELL,Flot,Bid,Slippage,sl,pt,"S1",456789,clrNONE); OrderModifi(ST(),PT()); } } //+------------------------------------------------------------------+
Не понимаю почему только с помощью этой строки происходит модернизация ордеров
Код:OrderModifi(ST(),PT());
без нее из менения стопв и профитов не происходит хотя в функции st1 уже ессть ST() и PT()
Генератор псевдослучайных чисел MathRand(). Генерирует в диапазоне 0-32768. Подогнать этот диапазон под нужный простая математика.Как сделать чтобы получать случайное число в заданных пределах и определенного типа?
модификация лота арифметической прогрессией сейчас тоже не работает почему тоПочему показывает ордеров 0 хотя селл 1 есть.
Не работает на определенном часу
И на определенном баре
Прошу дать подсказки
void OnTick()
{
st1(fl(),sw(),ST(),PT());
}
double fl()
{
uy(fiks);
double Flot = 0.0;
int Magic =456789;
switch(LOT)
{
case 0://Фиксированный лот
Flot = fiks[0];
break;
case 1://Иходя из баланса
Flot = NormalizeDouble(MathCeil(AccountBalance()/100)/100,2);
break;
case 2://Иходя из Эквити
Flot = NormalizeDouble(MathCeil(AccountEquity()/100)/100,2);
break;
case 3://Иходя из риска
Flot = NormalizeDouble((AccountFreeMargin()*fiks[1])/1000,2);
break;
case 4:
for(int i=0; i<=OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)
{
double profit=OrderProfit()+OrderCommission()+OrderSwap();
if(profit>0.00001)
Flot = OrderLots()+0.01;
else
if(profit< -0.00001)
Flot = 0.01;
}
}
break;
}
return(Flot);
}
void OrderModifi(double sl,double pt)
{
for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
{
int ticketss;
int Magic = 456789;
uy(fiks);
if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
{
switch(OrderType())
{
case 0:
if(OrderStopLoss()==0 && OrderTakeProfit()==0)
{
if((OrderOpenPrice()>sl && OrderStopLoss()!= sl) || (OrderOpenPrice()<pt && OrderTakeProfit()!=pt))
ticketss = OrderModify(OrderTicket(),OrderOpenPrice(),sl,pt,0,clrYellow);
break;
}
case 1:
if(OrderStopLoss()==0 && OrderTakeProfit()==0)
{
if((OrderOpenPrice()<sl && OrderStopLoss()!= sl) || (OrderOpenPrice()>pt && OrderTakeProfit()!=pt))
ticketss = OrderModify(OrderTicket(),OrderOpenPrice(),sl,pt,0,clrWhite);
break;
}
}
}
}
}
void st1(double Flot,string swop,double sl,double pt)
{
uo(in);
int ticketss;
if(in[1][1]>in[1][2])
{
Print("Lot=",NormalizeDouble(Flot,8));
ticketss=OrderSend(Symbol(),OP_BUY,Flot,Ask,Slippage,sl,pt,"S1",456789,clrNONE);
OrderModifi(ST(),PT());
}
if(in[1][1]<in[1][2])
{
Print("Lot1=",NormalizeDouble(Flot,8));
ticketss=OrderSend(Symbol(),OP_SELL,Flot,Bid,Slippage,sl,pt,"S1",456789,clrNONE);
OrderModifi(ST(),PT());
}
if(in[0][1]<in[0][2])
{
Print("Lot2=",NormalizeDouble(Flot,8));
ticketss=OrderSend(Symbol(),OP_BUY,Flot,Ask,Slippage,sl,pt,"S1",456789,clrNONE);
OrderModifi(ST(),PT());
}
if(in[0][1]>in[0][2])
{
Print("Lot3=",NormalizeDouble(Flot,8));
ticketss=OrderSend(Symbol(),OP_SELL,Flot,Bid,Slippage,sl,pt,"S1",456789,clrNONE);
OrderModifi(ST(),PT());
}
}
Код:void OnTick() { Comment(CountBars()); } //*********************************** int CountBars() { datetime newbar =0; int cnt = 0; if(newbar!=Time[0]) { newbar=Time[0]; cnt++; } return(cnt); } Почему считает до 1?
int CountBars()
{
datetime newbar =0;
int cnt = 0;
for(cnt =0; cnt>=Bars; cnt++)
{
if(newbar!=Time[0])
{
newbar=Time[0];
cnt++;
}
}
return(cnt);
}