и еще один вопросик. мой эксперт занимается анализом графика за нное количество месяцев, только есть графики , которые возвращают всю историю в минутном графике, а есть такие что больше чем полтора месяца никак не хотят, да и то это если промотаешь график вручную назад, дальше определенной даты даже вручную не мотает . хотя при этом на часовом - дневном- годовом графике все есть. можно как-то метатрейдер уговорить давать мне нужное значение или нет?
pycha: и еще один вопросик. мой эксперт занимается анализом графика за нное количество месяцев, только есть графики , которые возвращают всю историю в минутном графике, а есть такие что больше чем полтора месяца никак не хотят, да и то это если промотаешь график вручную назад, дальше определенной даты даже вручную не мотает . хотя при этом на часовом - дневном- годовом графике все есть. можно как-то метатрейдер уговорить давать мне нужное значение или нет?
Сколько именно истории выдавать, решает брокер. Если в настройках терминала выставлено максимальное количество баров, а на графике их меньше, значит брокер больше не даст.
Здравствуйте уважаемые форумчане. Вот хочу обратиться с просьбой. Смог ли бы кто выложить кусок кода с рабочей функцией iEnvelopesOnArray()? Мои все попытки приручить ее пока были безуспешны. Подозреваю что в этом вина разработчиков. Вот индикатор для проверки ее работы.
//+------------------------------------------------------------------+//| Tester_EnvOnArray.mq4 |//| Copyright 2005 г. до нашей эры, MetaQuotes Software Company. |//| https://www.mql4.com |//+------------------------------------------------------------------+#property copyright"2005 г. до нашей эры, MetaQuotes Software Company."#property link"https://www.mql4.com"#property description"Пример индикатора для проверки работы функции iEnvelopesOnArray()"#property strict//--- indicator settings#property indicator_chart_window#property indicator_buffers2#property indicator_color1 Green
#property indicator_color2 Red
//--- indicator buffersdouble ExtEnvBuffer[];
double ExtPriceBuffer[];
//--- bars minimum for calculation#define DATA_LIMIT 100//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+voidOnInit(void)
{
IndicatorShortName("EnvOnArr");
//--- 1 additional buffer are used for counting.
IndicatorBuffers(2);
IndicatorDigits(Digits + 2);
//--- drawing settings
SetIndexStyle(0, DRAW_LINE);
SetIndexDrawBegin(0, DATA_LIMIT);
SetIndexStyle(1, DRAW_NONE);
SetIndexDrawBegin(1, DATA_LIMIT);
//--- all indicator buffers mappingSetIndexBuffer(0, ExtEnvBuffer);
SetIndexBuffer(1, ExtPriceBuffer);
//--- name for DataWindow and indicator subwindow label
SetIndexLabel(0, NULL);
SetIndexLabel(1, NULL);
}
//+------------------------------------------------------------------+//| EnvelopesOnArray |//+------------------------------------------------------------------+intOnCalculate (constint rates_total,
constint prev_calculated,
constdatetime & time[],
constdouble & open[],
constdouble & high[],
constdouble & low[],
constdouble & close[],
constlong & tick_volume[],
constlong & volume[],
constint & spread[])
{
int i, limit;
double prev = 0.0, Deviation = 1;
//--- check for rates totalif(rates_total <= DATA_LIMIT)
return(0);
//--- last counted bar will be recounted
limit = rates_total - prev_calculated;
if(prev_calculated > 0)
{
limit++;
}
//--- price counted in the 2-nd additional bufferfor(i=0; i<limit-1; i++)
ExtPriceBuffer[i] = close[i];
//--- price counted in the 1-st additional bufferfor(i=0; i<limit-1; i++)
ExtEnvBuffer[i] = iEnvelopesOnArray(ExtPriceBuffer, 0, 5, MODE_SMA, 0, 1, MODE_UPPER, i);
//--- donereturn(rates_total);
}
//+------------------------------------------------------------------+
Добрый день, подскажите пожалуйста - у меня такая проблема: Робот заходит в позицию, и на следующем тике модифицируется его стоплосс под предыдущий лоу, а мне надо что бы стоплосс модифицировался только когда закроется свеча на которой была открыта позиция
void TrailingStop()
{
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true);
{
if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if (OrderType()==OP_BUY)
{
double LOW_1 = iLow(NULL,0,1);
bool res=OrderModify(OrderTicket(),OrderOpenPrice(),LOW_1,OrderTakeProfit(),0,White);
if(!res) Print("Ошибка модификации ордера. Код ошибки=",GetLastError());
}
if (OrderType()==OP_SELL)
{
double HIGH_1 = iHigh(NULL,0,1);
res=OrderModify(OrderTicket(),OrderOpenPrice(),HIGH_1,OrderTakeProfit(),0,White);
if(!res) Print("Ошибка модификации ордера. Код ошибки=",GetLastError());
}
}
}
}
return;
}
и это никак не пофиксили?
Как видите.
Впрочем, самый логичный и простой способ профиксить - запретить смену инструмента окна МТ. Поэтому предлагаю считать фичей :)
и еще один вопросик. мой эксперт занимается анализом графика за нное количество месяцев, только есть графики , которые возвращают всю историю в минутном графике, а есть такие что больше чем полтора месяца никак не хотят, да и то это если промотаешь график вручную назад, дальше определенной даты даже вручную не мотает . хотя при этом на часовом - дневном- годовом графике все есть. можно как-то метатрейдер уговорить давать мне нужное значение или нет?
Здравствуйте уважаемые форумчане. Вот хочу обратиться с просьбой. Смог ли бы кто выложить кусок кода с рабочей функцией iEnvelopesOnArray()? Мои все попытки приручить ее пока были безуспешны. Подозреваю что в этом вина разработчиков. Вот индикатор для проверки ее работы.
Всем привет. При тесте выскакивают ошибки:
2014.12.25 18:04:31.125 2014.11.03 00:00 Test3 EURUSD,H4: invalid ticket for OrderModify function
2014.12.25 18:04:31.125 2014.11.03 00:00 Test3 EURUSD,H4: OrderModify error 4051
много раз перепроверял, ошибок нет(как мне кажется).
Сбой происходит в этой части программы:
ModifyBuy, ModifySell, SelectBuy, SelectSell, - имеют тип bool
SendBuy, SendSell-int , int TP = 30
while(true)
{
SPREAD=MarketInfo(Symb,MODE_SPREAD);
SelectBuy=OrderSelect(OrderTicketBuy,SELECT_BY_TICKET);//buy
RefreshRates();
if(NormalizeDouble(OrderOpenPrice()+TP*Point,Digits)<NormalizeDouble(Ask,Digits))
{
ModifyBuy=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-(10-SPREAD)*Point,Bid+(30- SPREAD)*Point,0,0);
R=1;
break;
}//if2
Timen=OrderCloseTime();
if(Timen>0)
{
//--------------------------
Stop=StopLevel(Symb);
StopLong();//значение Long2
StopLoss_Func();//значение SL
//--------------------------
SendBuy=OrderSend(Symb,OP_BUYSTOP,Lote,Ask+Long2*Point,1,Bid-SL*Point,NULL);
for(i=1;i>OrdersTotal();i++)
{
if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES)==true)//Проверяем есть ли ордер
{
if(OrderSymbol()!=Symb) continue;
if(OrderType()==4)
{
OrderTicketBuy=OrderTicket();
break;
}
else
{
continue;
}
}
}
continue;
}//if2
SelectSell=OrderSelect(OrderTicketSell,SELECT_BY_TICKET,MODE_TRADES);//sell
RefreshRates();
if(NormalizeDouble(OrderOpenPrice()-TP*Point,Digits)>NormalizeDouble(Bid,Digits))
{
ModifySell=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(10-SPREAD)*Point,Ask-(30- SPREAD)*Point,0,0);
R=2;
break; //спред
}//if2
Timen=OrderCloseTime();
if(Timen>0)
{
//--------------------------
Stop=StopLevel(Symb);
StopLong();
StopLoss_Func();
//--------------------------
SendSell=OrderSend(Symb,OP_SELLSTOP,Lote,Bid-Long2*Point,1,Ask+SL*Point,NULL);
for(i=1;i>OrdersTotal();i++)
{
if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES)==true)//Проверяем есть ли ордер
{
if(OrderSymbol()!=Symb) continue;
if(OrderType()==6)
{
OrderTicketSell=OrderTicket();
break;
}
else
{
continue;
}
}
}
continue;
}//if2
}//while1
Если нужен весь код, то вот
Спасибо!
Добрый день, подскажите пожалуйста - у меня такая проблема: Робот заходит в позицию, и на следующем тике модифицируется его стоплосс под предыдущий лоу, а мне надо что бы стоплосс модифицировался только когда закроется свеча на которой была открыта позиция
или как избавиться от этой ошибки