[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 196
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
buy
int start()
{
OrderSend(Symbol(),OP_BUYSTOP,0.01,Ask+20*Point,3,Bid-50*Point,Bid+50*Point);
return(0);
}
помогите пожалуйста...
Пожалуйста, не несите ересь в люди. Идите занудствуйте куда-нить в другое место, благо хватает...
Спасибо, я как раз хотел с Вами посоветоваться.
1. Ну здесь double был применен только для сложения минут и часов. чтобы можно было обозначать контрольные точки в виде HH.MM (например 16.23).
2. Посмотрел последние страницы, там конечно есть про datetime, но не совсем то. Там просто делают вывод в формате HH.MM время последнего ордера.
Плохо искали. Стр.190, время поста 18.09.2011 23:03
Здравствуйте.
Помогите, пожалуйста, откорректировать код.
Обе приведённые ниже строчки глючат.
Заранее благодарю.
Сама прога:
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true)
Логичнее было-бы MODE_HISTORY
< 0.6, или что-нибудь еще в этом роде. Остаток от деления всегда меньше единицы :)
Это почему?) Остаток от деления 12 на 10 = 2.
А если всё-таки через большое количество переменных наподобие:
Сильно это плохо? или покатит?
И ещё маленький вопрос, если допустим я задам интервал (например 16.00-16.03) для выполнения условия. Как сделать так, чтобы он его выполнял только один раз, несмотря на приход новых тиков???
Покатит. А что бы один раз, введите дополнительную служебную переменную, как-то так:
Это почему?) Остаток от деления 12 на 10 = 2.
Покатит. А что бы один раз, введите дополнительную служебную переменную, как-то так:
Да, заглючило малость :)
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true)
Логичнее было-бы MODE_HISTORY
Полностью поддерживаю. Ночью соображалка подтормаживает.
Однако и с этой поправкой заметил, что вышеуказый глюк (неразбериха между переменной магик и числом) в скрипте возникает, когда повторно объявляешь переменную int MAGIC; (почему-то блокируется этот самый магик). Убираешь int MAGIC; (остаётся extern int MAGIC = 1;) - всё работает как часы.
Закономерный вопрос - зачем мне это нуна? Убрал int MAGIC; и живи спокойно. НО.
Мне этот код нужно засунуть в библиотеку. А без объявления int MAGIC; - будет ошибка.
Вот и думаю - как быть. Будет ли это всё у меня в советнике работать? И почему на работе скрипта так сказывается эта int MAGIC; ??
Скрипт привожу ниже:
Товарищи, помогите плз... написал простенький код, но при компиляции говорит, что скобки не уравновешены, а я их уже по 300 раз пересчитал - все на месте
Идея проще некуда - если MACD побыл выше(или ниже) 0 не более 7 минут, то позиция открывается
//+------------------------------------------------------------------+
//| MACD ^^^.mq4 |
//| Copyright © 2011, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
extern int TP = 100;
extern int TS = 100;
extern double lots = 0.1;
int slip = 3;
int Magic = 1;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
int total,ticket; //объявил тотал и тикет
int signal = signal_MACD(); //сигнал МАКД передает значение в сигнал
AnalyzeSignal(signal); //аналайз сигнал анализирует сигнал
int MACD[8] = {0,1,2,3,4,5,6,7}; //создал одномерный массив МАКД
MACD[0] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,7);
MACD[1] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,6);
MACD[2] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,5);
MACD[3] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,4);
MACD[4] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,3);
MACD[5] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,2);
MACD[6] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,1);
MACD[7] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,0);
total = OrdersTotal(); //тотал считает ордера
int signal_MACD() //расписываю сигнал МАКД
{
if(total<1) //если ордеров меньше 1, то рассматриваем условия
{
if(MACD[0]<0)
{
if(MACD[1]>0)
{
if(MACD[2]>0)
{
if(MACD[3]>0)
{
if(MACD[4]>0)
{
if(MACD[5]>0)
{
if(MACD[6]>0)
{
if(MACD[7]<0)
{
return(-100);
}
}
}
}
}
}
}
}
if(MACD[0]>0)
{
if(MACD[1]<0)
{
if(MACD[2]<0)
{
if(MACD[3]<0)
{
if(MACD[4]<0)
{
if(MACD[5]<0)
{
if(MACD[6]<0)
{
if(MACD[7]>0)
{
return(100);
}
}
}
}
}
}
}
}
}
}
void AnalyzeSignal(int signal)
{
if(signal == 100)
{
ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,"покупаем",Magic,0,Green);
if(ticket>0)
{
OrderSelect(ticket,SELECT_BY_TICKET);
Print("открылись на покупку по цене:" OrderOpenPrice());
}
else
{
Print("открыться не удалось по причине:" GetLastError());
return(0);
}
}
if(signal == -100)
{
ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,slip,Ask+TS*Point,Ask-TP*Point,"Продаем",Magic,0,Green);
if(ticket>0)
{
OrderSelect(ticket,SELECT_BY_TICKET);
Print("открылись на продажу по цене:" OrderOpenPrice());
}
else
{
Print("открыться не удалось по причине:" GetLastError());
return(0);
}
}
}
//----
return(0);
}
//+------------------------------------------------------------------+