[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 347
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Уважаемые эксперты помогите кто-нибудь доработать этот код чтобы получился простенький советник. Суть проста открываем 2 позиции Sell и Bui с заданными стопами по текущей цене. Потом при срабатывании одного из тейков или обоих стопов открываем новые позиции и тд. Суть вроде проста а всё равно не получается Заранее благодарен!!!
//+------------------------------------------------------------------+
//| 2DiffOrders.mq4 |
//| Copyright © 2008, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
extern double lots=0.01;
extern int SL_in_pips;
extern int TP_in_pips;
int x2;
int init()
{
if(SL_in_pips<=MarketInfo(Symbol(),MODE_STOPLEVEL) && SL_in_pips>0)
{
SL_in_pips=MarketInfo(Symbol(),MODE_STOPLEVEL);
Alert("Stoploss установлен слишком близко к цене открытия. Должен быть минимум ",MarketInfo(Symbol(),MODE_STOPLEVEL),"pt.");
}
if(TP_in_pips<=MarketInfo(Symbol(),MODE_STOPLEVEL) && TP_in_pips>0)
{
TP_in_pips=MarketInfo(Symbol(),MODE_STOPLEVEL);
Alert("Takeprofit установлен слишком близко к цене открытия. Должен быть минимум ",MarketInfo(Symbol(),MODE_STOPLEVEL),"pt.");
}
x2=1;
while(x2!=0)
{
if(OrderSend(Symbol(),0,lots,Ask,2,Bid-15*Point,Bid+15*Point,0)!=-1)
{
Alert("Ордер типа BUY успешно открыт");
OrderSend(Symbol(),1,lots,Bid,2,Ask+15*Point,Ask-15*Point,0);
x2=GetLastError();
if(x2==0)
Alert("Ордер типа SELL успешно открыт");
if(x2!=0)
Alert("Ордер типа SELL не открыт. Ошибка №: ",x2);
}else
{
x2=GetLastError();
if(x2!=0)
Alert("Ордер типа BUY не открыт. Ошибка №: ",x2);
}
}
//----
return(0);
Это только кажется, что ровно, а машинном представлении последний бит может принять разные значения. Т.е. 2.9999, 3 или 3.00000001
Чтобы избавиться от таких недоразумений в MQL есть функция NormalizeDouble()
да, NormalizeDouble() помогает, спасибо.
но всетаки непонятно, как такое возможно, вроде простое деление. причем если 0,5 или 0,9 или даже 0,31 делить на 0,1 все норм.
а тут явно у него 2,9 получается, непонятно... калькулятор точнее решает :-)
спасибо Reshetov и splxgf за помощь.
но всетаки непонятно, как такое возможно, вроде простое деление. причем если 0,5 или 0,9 или даже 0,31 делить на 0,1 все норм.
а тут явно у него 2,9 получается, непонятно... калькулятор точнее решает :-)
Калькуляторы имеют встроенные функции округления результатов. А решают они также, поскольку используют один и тот же математический сопроцессор для вычислений чисел с плавающей запятой.
Здравствуйте!
Подскажите, пожалуйста, кто может!!!
Сам пока не понимаю как сделать.
Задача:
Советник выставляет 1-2 ордера 1 раз в сутки.
Начальное значение переменной задается вручную и может принимать значение от 1 до 10.
Необходимо изменение заданной ранее переменной с шагом 1 до значения - 10
в каждый рабочий день советника только на 1, если в этот день не исполняется TP.
При исполнении TP - переменной возвращается значение - 1.
Подсчет SL не подходит, потому, что может быть один или два, а значение можно менять только 1 раз в сутки.
Т.е.
Переменная = 1
День 1 SL - переменная =2
День 2 SL - переменная =3
День 3 SL - переменная =4
День 4 TP - переменная =1
День 5 SL - переменная =2
... и так далее.
Помогите!
Спасибо.
Уважаемые эксперты помогите кто-нибудь доработать этот код чтобы получился простенький советник. Суть проста открываем 2 позиции Sell и Bui с заданными стопами по текущей цене. Потом при срабатывании одного из тейков или обоих стопов открываем новые позиции и тд. Суть вроде проста а всё равно не получается Заранее благодарен!!!
Знатоки,пожалуйста помогите.
Есть код, вычисляет однопериодный моментум и интегрирует его с большим периодом, затем выводит как индикатор.
Нужно написать индикатор с заданным периодом, который находит среднюю от полученной кривой и выводит как индикатор.
Код прилагаю:
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 DodgerBlue
#property indicator_width1 2
//------- Внешние параметры индикатора ----------------------------------------+
extern int MTM_Period = 1;
//extern int MTM_Integr_Period = 1000;
//extern int Applied_Price = 0; // Используемая цена:
// 0 - PRICE_CLOSE
// 1 - PRICE_OPEN
// 2 - PRICE_HIGH
// 3 - PRICE_LOW
// 4 - PRICE_MEDIAN
// 5 - PRICE_TYPICAL
// 6 - PRICE_WEIGHTED
extern int NumberOfBars = 1000; // Количество баров обсчёта (0-все)
//------- Буферы индикатора ---------------------------------------------------+
double buf0[];
//+----------------------------------------------------------------------------+
//| Custom indicator initialization function |
//+----------------------------------------------------------------------------+
void init() {
SetIndexBuffer (0, buf0);
SetIndexEmptyValue(0, 0);
SetIndexLabel (0, "i-mtm_integr");
SetIndexStyle (0, DRAW_LINE);
}
//+----------------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+----------------------------------------------------------------------------+
void deinit() {
Comment("");
}
//+----------------------------------------------------------------------------+
//| Custom indicator iteration function |
//+----------------------------------------------------------------------------+
void start() {
int LoopBegin, i,j, per=3;
double mtm, mtmsum;
if (NumberOfBars==0) LoopBegin=Bars-1;
else LoopBegin=NumberOfBars;
LoopBegin=MathMin(LoopBegin, Bars-1);
for (i=LoopBegin; i>=0; i--) {
mtm=Close[i]-Close[MTM_Period+i];
mtmsum=mtmsum+mtm;
buf0[i]=mtmsum;
}
/* for (i=LoopBegin-per;i>=per;i--){
mtm=Close[i]-Close[MTM_Period+i];
mtmsum[i]=0+mtm;
for (j=per;j<=0;j--){
mtmsum[i]=0+mtmsum[i+j];
mtmsum[i]=mtmsum[i]/per;
buf0[i]=mtmsum[i];
}
}*/
}
//+----------------------------------------------------------------------------+
Знатоки,пожалуйста помогите.
Есть код, вычисляет однопериодный моментум и интегрирует его с большим периодом, затем выводит как индикатор.
Нужно написать индикатор с заданным периодом, который находит среднюю от полученной кривой и выводит как индикатор.
Это только кажется, что ровно, а машинном представлении последний бит может принять разные значения. Т.е. 2.9999, 3 или 3.00000001
Чтобы избавиться от таких недоразумений в MQL есть функция NormalizeDouble()
Почему функция NormalizeDouble() не запускается по умолчанию для всех значений Ask, Bid, Low, и т.д.
Все на этом попадались, всем потом приходится исправлять это "вручную".. Странно что МТ не может прочесть то что сам и породил.
Спасибо, а есть гарантия что данные будут доступны в start()?
для гарантии можно попробовать использовать RefreshRates() - посмотрите примеры в стандартной справке Метаедитора
В оптимизации Советников есть опция "Сохранить как отчет", но при этом "Входные Параметры" в интернет эксплорере не показываются,
хотя, судя по html-коду, они в нем присутствуют. В общем то ради этих параметров оптимизация и запускалась.
Может кто-нибудь знает как их увидеть в эксплорере?
(есть еще возможность скопировать их в текстовый файл отдельной командой, но увидеть их в IE предпочтительнее)