Абдулхаким
Почетный гражданин
у него же до принта уже была нормализованная переменнаяв ордер сенд вставляй так:
у него же до принта уже была нормализованная переменнаяв ордер сенд вставляй так:
если речь о графических объектах, то к названиям объектов нужно добавить префикс и вынести его во внешние настройки.Ребята, что вписать в код индикатора чтобы он ставился на график много раз при смене настроек, а непереставлялся только с новыми ???
Скажем индюк МА, закинул его на график. Ок. Теперь беру тотже и второй раз ставлю с другой настройкой. А он, убирает показания первого и видна только Машка второго. Ну как пример...если речь о графических объектах, то к названиям объектов нужно добавить префикс и вынести его во внешние настройки.
будет ли он взаимодействовать с объектами не своего префикса зависит от кода, если там вообще такое предусмотрено
т.е. надо сделать, чтобы последующие присоединения к графику одного и того же индикатора не удаляли объекты уже стоящих на графике индикаторов ?А он, убирает показания первого и видна только Машка второго.
Вот именно.т.е. надо сделать, чтобы последующие присоединения к графику одного и того же индикатора не удаляли объекты уже стоящих на графике индикаторов ?
значит к этомуВот именно.
нужно ещё подправить логику удаления объектовк названиям объектов нужно добавить префикс и вынести его во внешние настройки.
т.е. надо сделать, чтобы последующие присоединения к графику одного и того же индикатора не удаляли объекты уже стоящих на графике индикаторов ?
Нужно к имени создаваемых объектов добавить префикс - каждый раз, когда на график ставиться та же копия индикатора - нужно менять этот префикс, что бы он не повторялся, да бы не было удаления объектов от уже установленных копий.Вот именно.
Проще сделать одну функцию и там разбираться с символом.Здравствуйте.
Скажите, как оптимизировать такую запись...?
т.е. нужно как то автоматически запускать функцию, в имя которой нужно вписывать имя символа.C-подобный:if(Symb=="USDCHF"){ USDCHF_outbid(); } if(Symb=="EURUSD"){ EURUSD_outbid(); } .... ....
В справочнике есть варианты возврата этой функции: SymbolInfoInteger(_Symbol,SYMBOL_TRADE_MODE)Подскажите есть ли индентификатор в маркетинфо которая давала бы информацию возможность торговли?(полный доступ к торгам или только закрытие)?
эта функция выдает целые числа поэтому я решил так воплотить:В справочнике есть варианты возврата этой функции: SymbolInfoInteger(_Symbol,SYMBOL_TRADE_MODE)
void OnTick()
{
string SWOP,TORG;
switch(SymbolInfoInteger(_Symbol,SYMBOL_TRADE_MODE))
{
case 1:
TORG ="Торговля по символу запрещена";
break;
case 2:
TORG ="Разрешены только покупки";
break;
case 3:
TORG ="Разрешены только продажи";
break;
case 4:
TORG ="Разрешены только операции закрытия позиций";
break;
case 5:
TORG ="Нет ограничений на торговые операции";
break;
}
if(MarketInfo(Symbol(),MODE_SWAPLONG)>0)
SWOP = "Покупки";
if(MarketInfo(Symbol(),MODE_SWAPSHORT)>0)
SWOP = "Продажи";
if(MarketInfo(Symbol(),MODE_SWAPSHORT)<0 && MarketInfo(Symbol(),MODE_SWAPLONG)<0)
SWOP = "Не торгуем";
Comment("Cвоп=",SWOP,"\n",
"Мода торговли=",TORG);
}
void OnTick()
{
if(OrdersTotal()==0)
{
ue(sltp);
uo(svecha);
LOT();
if(svecha[4][1]<0 && svecha[4][2]<0 && svecha[4][3]<0)
ticketss=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,0,0,"S1 buy",Magic,clrNONE);
if(svecha[4][1]>0 && svecha[4][2]>0 && svecha[4][3]>0)
ticketss=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,0,0,"S1 sell",Magic,clrNONE);
}
}
////////////////////////////////////////////////////////////////////////////////////////////
double LOT()//Функция по расчету лота
{
if(GetLastError()==0)
{
switch(_Lot)
{
case 0:
Lot=Lot;
break;
case 1:
Lot=NormalizeDouble(MathCeil(AccountBalance()/100)/100,2);
break;
case 2:
Lot=NormalizeDouble(MathCeil(AccountEquity()/100)/100,2);
break;
case 3:
Lot=NormalizeDouble((AccountFreeMargin()*RISK)/1000,2);
break;
}
};
switch(GetLastError())
{
case 131:
Lot=0.01;
break;
case 4051://Этот участок почему то на работает когда терминал выдает эту ошибку
Lot=0.01;
break;
}
return(Lot);
};
//+------------------------------------------------------------------+
Сначала нужно проверять какое число что сигнализирует.выдает целые числа
void OnTick()
{
for(int y=0; y<= OrdersHistoryTotal()-1; y++)//Начинаем перебор ордеров в истории
{
if(OrderSelect(y, SELECT_BY_POS) && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
{
Ticket = OrderTicket();
Symboly = OrderSymbol();
int Type = OrderType();
Lop = OrderLots();
switch(Type)
{
case 0:
OrderTipe = "Buy";
break;
case 1:
OrderTipe = "Sell";
break;
}
}
double SL = OrderStopLoss();
double TP = OrderTakeProfit();
double OP = OrderProfit();
Comment("Тикет ордера =",Ticket,"\n",
"Валютная пара=",Symboly,"\n",
"Тип ордера=",OrderTipe,"\n",
"Лот ордера=",Lop,"\n",
"Стоплос=",SL,"\n",
"Тейкпрофит=",TP,"\n",
"Приболь ордера=",OP);
};
if(OrdersTotal()==0)
{
ue(sltp);
uo(svecha);
LOT();
if(svecha[4][1]<0 && svecha[4][2]<0 && svecha[4][3]<0)
ticketss=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,0,sltp[3],"S1 buy",Magic,clrNONE);
if(svecha[4][1]>0 && svecha[4][2]>0 && svecha[4][3]>0)
ticketss=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,0,sltp[1],"S1 sell",Magic,clrNONE);
}
}
На скрине:Что не верно? Скажите пожалуйста.
for(int y=0; y<= OrdersHistoryTotal()-1; y++){
if(OrderSelect(y, SELECT_BY_POS){}
}
можно поподробнее о поставленной задаче ?нужно как то автоматически запускать функцию, в имя которой нужно вписывать имя символа.
можно поподробнее о поставленной задаче ?
Как я понял, он хочет в названии функции менять символ, т.е. переименовывать функцию. (но так нельзя делать)C-подобный:if(Symb=="USDCHF"){ USDCHF_outbid(); } .... ....
Переписал вот так:На скрине:
Посмотреть вложение 489041
это значение и должно меняться, если меняется график цены и открыт 1 или больше ордеров и они не захеджированы.
Посмотреть вложение 489042
показаны все данные об ордере, открытие и закрытие в том числе
В коде:
с этой записью опять что-то не тоC:for(int y=0; y<= OrdersHistoryTotal()-1; y++){ if(OrderSelect(y, SELECT_BY_POS){} }
вот загадка, если просил
for(int y=0; y<=OrdersHistoryTotal()-1; y++)
в этой строчке три символа лишние, если их убрать, то ничего не изменится (разве что только расчётов станет меньше)
if(OrderSelect(y, SELECT_BY_POS,MODE_HISTORY)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
мне пока тоже не особо понятноКак я понял