[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 863

 
IgorM:

как лучше сохранять важные данные/переменные на случай зависания терминала(перебоев с энергоснабжением)?

- глобальные переменные терминала? в файл?

- с какой периодичностью? (важно последнеее значение эквити и несколько флагов (bool) советника)

в чем проблема, все в массив, а массив в файл на каждом тике, в инициализации читаем файл. и ноль проблем
 

Здраствуйте!

Никак не могу понять почему не модфицируются открыте позиции.Вроде тип ордера указал(в функции ордер селект)

//+------------------------------------------------------------------+
//| news trade.mq4 |
//| Copyright © 2010, MetaQuotes Software Corp. |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"


extern bool In_BUYSTOP=true;
extern int TakeProfit_buy=100;
extern int StopLoss_buy=5;
extern double Lots_buy=0.01;
//+------------------------------------------------------------------+
extern bool In_SELLSTOP =true;
extern int TakeProfit_sell=100;
extern int StopLoss_sell =5;
extern double Lots_sell =0.01;
extern int LevelProfit = 25; // - Уровень профита в пунктах, которого должна достигнуть позиция для того, чтобы её стоп был перенесён на уровень безубытка.
extern int LevelWLoss = 1; // - Уровень безубытка в пунктах, на который будет перенесён стоп позиции после того, как её профит достигнет уровня LevelProfit в пунктах.

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
int profitbuy=((Bid - OrderOpenPrice())/Point); // BUY
int profitsell=((OrderOpenPrice()- Ask)/Point); // SELL
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
//----
{
int ticket;
if (Bid >iHigh(NULL,PERIOD_D1,1))
{
if(OrdersTotal() < 1)
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots_sell,iHigh(NULL,PERIOD_D1,1),3,iHigh(NULL,PERIOD_D1,1)+StopLoss_sell*Point,iHigh(NULL,PERIOD_D1,1)-TakeProfit_sell*Point,Hour() == 21 && Minute() == 59);
}
if (Ask <iLow(NULL,PERIOD_D1,1))
{
if(OrdersTotal() < 1)
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots_buy,iLow(NULL,PERIOD_D1,1),3,iLow(NULL,PERIOD_D1,1)-StopLoss_buy*Point,iLow(NULL,PERIOD_D1,1)+TakeProfit_buy*Point,Hour() == 21 && Minute() == 59);
}
//oooooooooooooooooooooooooooooooooooooooooooooooooooo
return(0);
}
//+------------------------------------------------------------------+
if(OrderSelect(0, SELECT_BY_POS,MODE_TRADES)==true)
{
int order_type=OrderType();
order_type=OP_SELL;
int profitsell=((OrderOpenPrice()- Ask)/Point);
if (profitsell>5)
ticket=OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderTakeProfit(),0,Blue);
return(0);
}
if(OrderSelect(0, SELECT_BY_POS,MODE_TRADES)==true)
{
order_type=OP_BUY;
int profitbuy=((Bid - OrderOpenPrice())/Point);
if (profitbuy>5)
int stopmodify=OrderOpenPrice();
OrderModify(OrderTicket(),OrderOpenPrice(),stopmodify,OrderTakeProfit(),0,Blue);
return(0);
}
 

Уважаемые разработчики, вопрос к вам.

Не могу добиться корректной работы глобальной переменной индикатора при вызове индикатора из эксперта.

Вот код индикатора (оставлены только строки, существенные для понимания вопроса).

double  price;
double  PriceBuffer[];

int init()
{
   SetIndexBuffer(0,PriceBuffer);
   return(0);
}
int start()
{
   int limit, i;
   int counted_bars=IndicatorCounted();
   
   //---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;

   for(i=limit-1; i>=0; i--)
   {
        PriceBuffer[i] = price;
        price = iClose(NULL,0,i);
   }
   return(0);
}

На каждом баре он сохраняет текущую цену в глобальной переменной price, а на следующем баре отображает ее. Таким образом, мы должны увидеть график цены, задержанный на один бар. Если присоединить индикатор к графику, все работает честно:

Но если этот индикатор вызывать из эксперта, и выполнить визуальное тестирование, то по окончании тестирования мы увидим: индикатор лишь слегка похож на то, что задумано.

Если теперь на графике визуального тестирования выполнить пересчет индикатора (для этого например открыть-закрыть его свойства), все приходит в норму - мы опять видим первую картинку.

Что я делаю не так?

Поиском пользовался, ответа не нашел.

Использую MT4 Version 4.00 Build 226.

 
Я думаю что это из-за недостаточности тиков в истории. Вот и выходит что пропускает. В реальном времени всё должно быть чётко! ;)
 

Здравствуйте, подскажите где в коде не точность, так как при работе скрипта в логе такая ошибка:

15:40:29 11dP_real_symbol EURUSD,H4: <--- Найдено 2 корректных графиков. --->

15:40:29 11dP_real_symbol EURUSD,H4: <--- Для просмотра результатов, откройте график EURUSD,M1002 --->

15:40:29 11dP_real_symbol EURUSD,H4: symbol name for MarketInfo function must be a string

15:40:29 11dP_real_symbol: empty string parameter for FileWriteString function

15:40:29 11dP_real_symbol EURUSD,H4: symbol name for MarketInfo function must be a string

15:40:29 11dP_real_symbol EURUSD,H4: <--- Для просмотра результатов, откройте график,M1002 --->

15:40:29 11dP_real_symbol EURUSD,H4: the first parameter for WindowHandle function must be an initialized string

15:40:30 11dP_real_symbol EURUSD,H4: the first parameter for WindowHandle function must be an initialized string

15:40:31 11dP_real_symbol EURUSD,H4: the first parameter for WindowHandle function must be an initialized string

Сам код прилагаю ниже: 

 

Файлы:
11dp.mq4  15 kb
 
IgorM:

как лучше сохранять важные данные/переменные на случай зависания терминала(перебоев с энергоснабжением)?

- глобальные переменные терминала? в файл?

- с какой периодичностью? (важно последнеее значение эквити и несколько флагов (bool) советника) 

 


В отличие от других переменных, GV-переменная может быть не только создана из любой программы, но и удалена. Значение GV-переменной сохраняется на жёстком диске компьютера и после закрытия клиентского терминала. Однажды объявленная GV-переменная существует в клиентском терминале в течение 4 недель с момента последнего обращения. Если в течение указанного срока ни одна из программ не обращалась к GV-переменной, то она удаляется клиентским терминалом. GV-переменная может иметь только тип double.
 
etroplus:

Здраствуйте!

Никак не могу понять почему не модфицируются открыте позиции.Вроде тип ордера указал(в функции ордер селект)

//+------------------------------------------------------------------+
//| news trade.mq4 |
//| Copyright © 2010, MetaQuotes Software Corp. |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"


extern bool In_BUYSTOP=true;
extern int TakeProfit_buy=100;
extern int StopLoss_buy=5;
extern double Lots_buy=0.01;
//+------------------------------------------------------------------+
extern bool In_SELLSTOP =true;
extern int TakeProfit_sell=100;
extern int StopLoss_sell =5;
extern double Lots_sell =0.01;
extern int LevelProfit = 25; // - Уровень профита в пунктах, которого должна достигнуть позиция для того, чтобы её стоп был перенесён на уровень безубытка.
extern int LevelWLoss = 1; // - Уровень безубытка в пунктах, на который будет перенесён стоп позиции после того, как её профит достигнет уровня LevelProfit в пунктах.

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
int profitbuy=((Bid - OrderOpenPrice())/Point); // BUY - лишнее, сначала все переменные равны 0
int profitsell=((OrderOpenPrice()- Ask)/Point); // SELL
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
//----
{
int ticket;
if (Bid >iHigh(NULL,PERIOD_D1,1))
{
if(OrdersTotal() < 1)
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots_sell,iHigh(NULL,PERIOD_D1,1),3,iHigh(NULL,PERIOD_D1,1)+StopLoss_sell*Point,iHigh(NULL,PERIOD_D1,1)-TakeProfit_sell*Point,Hour() == 21 && Minute() == 59);
}
if (Ask <iLow(NULL,PERIOD_D1,1))
{
if(OrdersTotal() < 1)
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots_buy,iLow(NULL,PERIOD_D1,1),3,iLow(NULL,PERIOD_D1,1)-StopLoss_buy*Point,iLow(NULL,PERIOD_D1,1)+TakeProfit_buy*Point,Hour() == 21 && Minute() == 59);
}
//oooooooooooooooooooooooooooooooooooooooooooooooooooo
return(0);
}
//+------------------------------------------------------------------+
if(OrderSelect(0, SELECT_BY_POS,MODE_TRADES)==true)
{
int order_type=OrderType();
order_type=OP_SELL;//может if(order_type==OP_SELL),тогда нужны будут еще скобки
int profitsell=((OrderOpenPrice()- Ask)/Point);
if (profitsell>5)//так и будешь каждый тик пытаться модифицировать ордер?
ticket=OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderTakeProfit(),0,Blue);
return(0);
}
if(OrderSelect(0, SELECT_BY_POS,MODE_TRADES)==true)
{
order_type=OP_BUY;
int profitbuy=((Bid - OrderOpenPrice())/Point);
if (profitbuy>5)
int stopmodify=OrderOpenPrice();
OrderModify(OrderTicket(),OrderOpenPrice(),stopmodify,OrderTakeProfit(),0,Blue);
return(0);
}
 
Здравствуйте, подскажите где в коде не точность, так как при работе скрипта в логе такая ошибка:


15:40:29 11dP_real_symbol EURUSD,H4: <--- Найдено 2 корректных графиков. --->

15:40:29 11dP_real_symbol EURUSD,H4: <--- Для просмотра результатов, откройте график EURUSD,M1002 --->

15:40:29 11dP_real_symbol EURUSD,H4: symbol name for MarketInfo function must be a string

15:40:29 11dP_real_symbol: empty string parameter for FileWriteString function

15:40:29 11dP_real_symbol EURUSD,H4: symbol name for MarketInfo function must be a string

15:40:29 11dP_real_symbol EURUSD,H4: <--- Для просмотра результатов, откройте график,M1002 --->

15:40:29 11dP_real_symbol EURUSD,H4: the first parameter for WindowHandle function must be an initialized string

15:40:30 11dP_real_symbol EURUSD,H4: the first parameter for WindowHandle function must be an initialized string

15:40:31 11dP_real_symbol EURUSD,H4: the first parameter for WindowHandle function must be an initialized string

Сам код прилагаю ниже:
Файлы:
11dp_1.mq4  15 kb
 

Подскажите,пожалуста,что означает                  "OP BUY"-variable expected

 

    здесь             while(разница>Размах)
( OrderSend (string symbol, OP_BUY, volume, double price, slippage,Bid-stoploss*Point,
Bid+takeprofit*Point, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=Red) )

while(0-разница>Размах)
( OrderSend (string symbol, OP_SELL, volume, double price, slippage,Ask+stoploss*Point,
Ask-takeprofit*Point, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=Black) )

 

 
как в mql4 записать точку на графике? надо цену и время записать так, чтобы она оставалась на месте при любом тайм-фрейме