[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 88

 

Все было тут C:\Users\======\AppData\Local\VirtualStore\Program Files\====== - MetaTrader\

vista

 

Подскажите пожалуйста.

Я взял написал простенький скрипт (установка двух отложенников в обе стороны близко к рынку, чтобы кидать его на график перед выходом новости, чтобы не суетиться вручную), уж казалось бы - куда проще, однако не работает, ордеров никаких не открывает, и в журнале просто пишет что скрипт такой-то loaded successfully, а затем сразу removed в ту же секунду! Компилируется без ошибок. Я его перевел в форму эксперта, т.е. добавил инит и деинит, для проверки в тестере, он заработал. Но как Вы понимаете, мне же нужен не эксперт, а именно скрипт.

Что здесь не так? Заранее спасибо.

Вот код скрипта:

#property copyright "alexey15"
#property link ""
#property show_confirm

extern int SL = 15;
extern int TP = 90;
extern int DELTA = 15;
extern double LOT = 0.1;
extern int SLIP = 3;

//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
//----
double BUYPRICE = Ask + DELTA*Point;
double SELLPRICE = Bid - DELTA*Point;
int OPEN_ORDER;

OPEN_ORDER=OrderSend(Symbol(),OP_BUYSTOP,LOT,BUYPRICE,SLIP,BUYPRICE-SL*Point,BUYPRICE+TP*Point,NULL,0,0,Blue);
OPEN_ORDER=OrderSend(Symbol(),OP_SELLSTOP,LOT,SELLPRICE,SLIP,SELLPRICE+SL*Point,SELLPRICE-TP*Point,NULL,0,0,Red);


//----
return(0);
}
//+------------------------------------------------------------------+

 
wiwkin52:

Здравствуйте. Помогите пожалуйста. Удалил мт, вместе с ним все индикаторы, все полностью. Сейчас установил, а там все как было так и осталось. Как быть? Может еще где то хранятся копии индикаторов и всего остального?

Вы только деинсталлировали или удалили еще и папку с МТ из Program Files?
 
alexey15:

Подскажите пожалуйста.

Я взял написал простенький скрипт (установка двух отложенников в обе стороны близко к рынку, чтобы кидать его на график перед выходом новости, чтобы не суетиться вручную), уж казалось бы - куда проще, однако не работает, ордеров никаких не открывает, и в журнале просто пишет что скрипт такой-то loaded successfully, а затем сразу removed в ту же секунду! Компилируется без ошибок. Я его перевел в форму эксперта, т.е. добавил инит и деинит, для проверки в тестере, он заработал. Но как Вы понимаете, мне же нужен не эксперт, а именно скрипт.

Что здесь не так? Заранее спасибо.

Вот код скрипта:


Проверил. Ваш скрипт работает.

На всякий случай выведите принт ошибки:

int start()
{
//----
double BUYPRICE = Ask + DELTA*Point;
double SELLPRICE = Bid - DELTA*Point;
int TicketBS,TicketSS;
TicketBS=OrderSend(Symbol(),OP_BUYSTOP,LOT,BUYPRICE,SLIP,BUYPRICE-SL*Point,BUYPRICE+TP*Point,NULL,0,0,Blue);
TicketSS=OrderSend(Symbol(),OP_SELLSTOP,LOT,SELLPRICE,SLIP,SELLPRICE+SL*Point,SELLPRICE-TP*Point,NULL,0,0,Red);
 if(TicketBS<=0 || TicketSS<=0)Print("Error = ",GetLastError());
//----
return(0);
}

 
alexey15:

Подскажите пожалуйста.

Я взял написал простенький скрипт (установка двух отложенников в обе стороны близко к рынку, чтобы кидать его на график перед выходом новости, чтобы не суетиться вручную), уж казалось бы - куда проще, однако не работает, ордеров никаких не открывает, и в журнале просто пишет что скрипт такой-то loaded successfully, а затем сразу removed в ту же секунду! Компилируется без ошибок. Я его перевел в форму эксперта, т.е. добавил инит и деинит, для проверки в тестере, он заработал. Но как Вы понимаете, мне же нужен не эксперт, а именно скрипт.

Что здесь не так? Заранее спасибо.

На четырёхзнаке работает. На пятизнаке не проверял, но добавил проверку на ограничения по уровню СтопЛевел:

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
extern int SL     = 15;
extern int TP     = 90;
extern int DELTA  = 15;
extern double LOT = 0.1;
extern int SLIP   = 3;

//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
//----
int StopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL);
if (DELTA <= StopLevel) DELTA = StopLevel+1;

double BUYPRICE = Ask + DELTA*Point;
double SELLPRICE = Bid - DELTA*Point;
int OPEN_ORDER;

OPEN_ORDER=OrderSend(Symbol(),OP_BUYSTOP,LOT,BUYPRICE,SLIP,BUYPRICE-SL*Point,BUYPRICE+TP*Point,NULL,0,0,Blue);
OPEN_ORDER=OrderSend(Symbol(),OP_SELLSTOP,LOT,SELLPRICE,SLIP,SELLPRICE+SL*Point,SELLPRICE-TP*Point,NULL,0,0,Red);

//----
return(0);
}
//+------------------------------------------------------------------+
В принципе, можете сделать корректировку Point под четырёх-, пятизнак во избежание ошибок. Так как уровень Дельта должен быть на пятизнаке в десять раз больше, т.е. не 15, а 150, ну и стопы с тейками соответственно...

Тогда это будет выглядеть так:

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
extern int SL     = 15;
extern int TP     = 90;
extern int DELTA  = 15;
extern double LOT = 0.1;
extern int SLIP   = 3;

//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
//----
double PointX;

if(Digits==5 || Digits==3) PointX = Point * 10;    // Корректировка Point под трёх- пятизнак
if(Digits==4 || Digits==2) PointX = Point;

int StopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL);
if (DELTA <= StopLevel) DELTA = StopLevel+1;

double BUYPRICE = Ask + DELTA*PointX;
double SELLPRICE = Bid - DELTA*PointX;
int OPEN_ORDER;

OPEN_ORDER=OrderSend(Symbol(),OP_BUYSTOP,LOT,BUYPRICE,SLIP,BUYPRICE-SL*PointX,BUYPRICE+TP*PointX,NULL,0,0,Blue);
OPEN_ORDER=OrderSend(Symbol(),OP_SELLSTOP,LOT,SELLPRICE,SLIP,SELLPRICE+SL*PointX,SELLPRICE-TP*PointX,NULL,0,0,Red);

//----
return(0);
}
//+------------------------------------------------------------------+
 

Доброе утро !

Никто по индексам не подскажет...?

 
volshebnik:

Доброе утро !

Никто по индексам не подскажет...?

Точно, индексы.
 
splxgf:
Точно, индексы.
Не смешно ) Вопрос был здесь - https://www.mql5.com/ru/forum/131277/page87 Но, так как на форуме администраторы не рекомендуют повторять вопросы, поэтому я его вновь не написал.
 
volshebnik:

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

Подскажите, пожалуйста, что не так ? Ставлю советник на тестер на GBPUSD - открывает сделки всё, как положено. Cтавлю его же на индекс доллара DXH1 - многие сделки не открывает: ошибка "130" - Неправильные стопы. Причём непонятно, что не так - при похожих ситуациях то открывает, то нет, но больше, что нет. Спред и уровень стопов для индекса доллара -100 и 200. Спред и уровень стопов для GBPUSD -3 и 4. Цены в индексе доллара, например 78,150, в паре - 4 знака после запятой. Но это учитывается

Вот часть кода :


На вскидку:

1) SL и TP ненормализованы;

2) в OrderSend при нормализации используется Digits, тогда как ордер выставляется по Symb.

Попробуйте так:

int opDigits=MarketInfo(Symb,MODE_DIGITS);
SL = NormalizeDouble(SL,opDigits);
TP = NormalizeDouble(TP,opDigits);
ОткрФрвверх = NormalizeDouble(ОткрФрвверх,opDigits);
ticketup=OrderSend(Symb, OP_BUYSTOP, Lot, ОткрФрвверх,0, SL, TP,NULL,A,0,вверх); // Ордер вверх
 
PapaYozh:


На вскидку:

1) SL и TP ненормализованы;

2) в OrderSend при нормализации используется Digits, тогда как ордер выставляется по Symb.

Попробуйте так:

Большое спасибо ! Заработало, правда редко, иногда всё же проскакивает эта же ошибка - 130....... ( А нормализовать стопы нужно всегда или только на индексах ? (просто на парах валют стопы всегда, по-моему, работали без нормализации).