Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Попробуйте сделать что-то вроде этого:
{
string sname=TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);
string tname="";
for (int i=0;i<StringLen(sname);i++)
{
string char = StringSubstr(sname,i,1);
if (char!="." && char!=":")
if (char==" ")
tname = tname+"_";
else tname = tname+char;
}
return(tname+"_"+Symbol()+Period()+".csv");
}[/php]this one adds hour, minute and seconds in the middle to make it more or less unique (so something like this "20090924_102541_EURUSD15.csv"). To make it really sure that the file does not exist it would have to be a bit more complicated (something like this :
[php]string uniqueFileName()
{
string sname=TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);
string tname="";
int thand;
for (int i=0;i<StringLen(sname);i++)
{
string char = StringSubstr(sname,i,1);
if (char!="." && char!=":")
if (char==" ")
tname = tname+"_";
else tname = tname+char;
}
//
//
//
//
//
tname = tname+"_"+Symbol()+Period()+".csv";
thand = FileOpen(tname,FILE_BIN|FILE_READ);
if (thand==-1)
return(tname);
else
{
FileClose(thand);
return("failed to make unique name");
}
}В случае неудачи он вернет строку"не удалось создать уникальное имя", и в этом случае вы должны решить, сколько раз вы хотите, чтобы он повторил попытку.
PS: использование будет таким: someFileName=uniqueFileName();
с уважением
mladen
привет всем,
Я трейдер, но не знаю языка mq4 и пытаюсь сделать это со вторника...
Мне нужно сохранить мой график в формате csv с помощью скрипта. У меня есть хороший скрипт, который я могу просто перетащить на любой график и любой таймфрейм, и он делает все просто замечательно, за исключением имени файла.
Я хотел бы, чтобы он мог автоматически генерировать уникальное имя файла при каждом сохранении графика, чтобы мне не приходилось переименовывать его каждый раз, когда я сохраняю другой файл в той же папке.
string fname = [дата в формате YYYYMMDD] + "_"+[дата - только час]+"_" + Symbol() + Period() + ".csv";
Код, о котором идет речь, выделен жирным шрифтом.
Когда я правильно выполнил код, я думаю, что имя выходного файла будет выглядеть следующим образом
20090924_10_GBPJPY15.csv
Извините, что не могу потратить много времени, чтобы прочитать 157 страниц этой огромной темы (я пытался, и у меня закружилась голова).
Заранее спасибо.Используйте это так (mql не позволяет вложенные функции или процедуры, поэтому функция или процедура должна быть отдельной)
Все работает отлично, спасибо большое.
По поводу сохранения файлов в любом месте: да, это можно сделать с помощью windows API. Вот ссылка с хорошим примером и хорошим объяснением, как это сделать: Файловые операции через WinAPI - Статьи MQL4
Я буду изучать это, и обязательно вернусь в эту тему.
Да благословит вас Бог.
"Дублирующая запись": Почему моя программа не работает?
Извините: я разместил это раньше, но я не могу переместить сообщение на Форум.
(Он также не позволяет делать "закладки" из истории моего компьютера...)
Короче: написал простую программу, которая проверяет, являются ли два последовательных бара "вверх" или "вниз".
Т.е.: при "росте", максимум на баре 1 выше, чем на баре 2, а минимум на баре 1
также выше, чем на баре 2. (Вниз - симметрично).
Программа работает с прорывами, поэтому на "вверх" максимум бара 1 минус минимум бара 2 должен быть выше некоторого порога.
бара 2 должны быть выше некоторого порога. ("Вниз" - симметричный.)
Сейчас работаю с M30 GBPUSD. Выбрал этот "порог прорыва" на глаз,
как и для TakeProfit. StopLoss - как указано в проге.
Итак: пытаюсь набраться опыта в MetaTrader & mql4.
Потом можно пробовать другие проги, оптимизировать и т.д.
Итак: дошел до компиляции проги и запуска на тестере стратегий.
Но, она никогда не доходит до второй половины проги, и не печатает, что она
что он ввел ордер.
Для кого-то опытного, возможно, моя ошибка очевидна.
Для меня же она не очевидна.
Так что: не могли бы вы помочь с этим?
Спасибо.
Прога работает следующим образом.
//+------------------------------------------------------------------+
//| функция инициализации эксперта |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| функция деинициализации эксперта | |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| функция запуска эксперта |
//+------------------------------------------------------------------+
int start()
{
//----
bool TrendUp1;double TakeProfitUp;double EE = .00500;
bool OrdTot_OK;double lot;double slip;
double SL_Trailing_Up;bool High2Up;bool Low2Up;
int ticketup;int ticketdown;bool DownAndBig; bool UpAndBig;
bool TrendDown; double SL_Trailing_Down;double TakeProfitDown;
bool High2down; bool Low2down;
int ABC = OrdersTotal();
double Size1 = .00630;bool BigUp; double A = High[1];double B= Low[2];
double C = High[2]; double D = Low[1];bool BigDown;
//------------------------------------ начало ордера
if (ABC == 0)// нет ордеров на выход - true
OrdTot_OK = true;
if (ABC == 0)// no orders out is true
Print ("при последовательности ордеров вниз, ни один ордер не вышел");
if ((C-D) > Size1)//высота из 2 меньше минимума из 1 > .0063
BigDown = true;
if ((C-D) > Size1)//high of 2 less low of 1 > .0063
Print ("на последовательности ордеров вниз, найден большой прорыв вниз");
if (High[1]< High[2])
High2down=true;
if (High[1]< High[2])
Print ("на последовательности ордеров вниз, последовательные бары имеют снижающиеся максимумы");
if(Low[1]< Low[2])
Low2down=true;
if(Low[1]< Low[2])
Print ("в последовательности ордеров вниз, последовательные бары имеют убывающие минимумы");
if (High2down && Low2down)
TrendDown=true;
if (High2down && Low2down)
Print ("в последовательности ордеров на понижение установлен флаг TrendDown");
if (TrendDown)
SL_Trailing_Down = High[1];
if (TrendDown)
Print ("в последовательности ордеров на понижение, установлен стоп_лосс");
if (TrendDown)
TakeProfitDown = Bid - (.005);
if (TrendDown)
Print ("в последовательности ордеров на понижение, получен тейкпрофит", TakeProfitDown);
if (TrendDown && BigDown)
DownAndBig = true;
if (DownAndBig && OrdTot_OK)
ticketdown = OrderSend(Symbol(),OP_SELL,lot,Bid,slip,SL_Trailing_Down,TakeProfitDown,Blue);
if (DownAndBig && OrdTot_OK)
Print ("на последовательности ордеров вниз, пытались ввести тикет", ticketdown);
if (ticketdown < 0)
Print("OrderSend_Down failed with error #",GetLastError());
return(0);
//----------------------------------------------down order done
//---------------------------------------------------up order start
if (ABC == 0)
OrdTot_OK = true;
if (ABC == 0)
Print ("на восходящей последовательности не было ни одного ордера");
if ((A - B) > Size1)
BigUp = true;
if ((A - B) > Size1)
Print ("на восходящей последовательности тест размера для двух баров прошел нормально");
if (High[1] > High[2])
High2Up = true;//44
if (High[1] > High[2])
Print ("на восходящей последовательности тест на повышение максимумов был в порядке");
if(Low[1] > Low[2])
Low2Up=true;
if(Low[1] > Low[2])
Print ("на восходящей последовательности тест на растущие минимумы был в порядке");
if (High2Up && Low2Up)
TrendUp1=true;
if (High2Up && Low2Up)
Print ("на восходящей последовательности был установлен флаг для восходящей последовательности");
if (TrendUp1)
SL_Trailing_Up = Low[1] ;
if (TrendUp1)
Print ("на восходящей последовательности установил стоплосс");
if (TrendUp1)
TakeProfitUp = Ask + (.005);
if (TrendUp1)
Print ("на восходящей последовательности установлен тейкпрофит", TakeProfitUp);
if (TrendUp1 && BigUp)
UpAndBig = true;
if ( UpAndBig && OrdTot_OK)
ticketup = OrderSend(Symbol(), OP_BUY,lot, Ask,slip, SL_Trailing_Up,TakeProfitUp,Red);
if (UpAndBig && OrdTot_OK)
Print ("на восходящей последовательности попытался отправить ордер", ticketup);
if (ticketup < 0)
Print("OrderSend_Up failed with error #",GetLastError());
return(0);
//-------------------------------------------------up order done
//----
return(0);//эта строка может быть лишней
//+------------------------------------------------------------------+
//----
return(0);
}
//+------------------------------------------------------------------+
Использование нескольких CharToStr????
Я хотел бы разместить два символа wingding. Один поверх другого. Вот код, который я использую для установки первого символа-----ObjectSetText("signal "+x+"0",CharToStr(104),symbolSize, "Wingdings",Yellow);.
Я хотел бы добавить (236) и использовать для него другой цвет.
Возможно ли это сделать? Если да, то помогите, пожалуйста.
Спасибо за внимание,
gever17
Sleep | IsTradeContextBusy
Приветствую CodeMasters и всех остальных!
У меня есть советник на основе фракталов, он используется на 1 платформе MT4, и на нескольких валютных парах, на таймфрейме D1.
Поскольку более одной копии советника торгуют в один и тот же момент, я получаю уведомление ''Trade Context Is Busy'' в моем журнале.
Я хотел бы вставить в советник функцию Sleep или IsTradeContextBusy, но не знаю, где ее разместить:
- после функции отправки ордера, отдельно для функции продажи и покупки?
- после функции отправки ордера на продажу и покупку?
- как решить эту проблему - с помощью
if (IsTradeContextBusy() == true) Sleep (5000); return;
???
Пожалуйста, подскажите или направьте меня к решению.
Большое спасибо за помощь,
Удачи,
Саймон
Советник прилагается.
Нужен совет!
Здравствуйте,
Я был бы очень признателен программистам за помощь в решении проблемы, из-за которой я теряю деньги. Просто у меня есть советник, который должен открывать позиции на определенном ценовом уровне, но иногда из-за бичевания он открывает слишком много позиций. Я бы хотел, чтобы он открывал только одну. Может ли кто-нибудь сказать мне, можно ли это исправить одной строчкой кода или мне нужно нанять программиста?
Спасибо.
Посоветуйте, пожалуйста
Привет, ребята, я действительно не знаю, как работает MagicNumber, потому что кажется, что он НЕ РАБОТАЕТ. Я сделал 2 простых советника, которые прилагаются, я все еще учусь.
1. Покупаем, когда цена выше 100SMA
2. Продавать, когда цена также выше 100SMA
Это значит, что когда вы прикрепляете их к двум разным графикам Eurusd, они должны покупать и продавать в одно и то же время. Теоретически, каждый советник работает самостоятельно.
Но это не так... Похоже, что если сначала идет продажа, то советник на покупку не работает, и наоборот.
Может ли кто-нибудь перекодировать мой советник, управляющий MagicNumber? Что-нибудь не так?
Большое спасибо
Привет, ребята, я действительно не знаю, как работает MagicNumber, потому что кажется, что он НЕ РАБОТАЕТ. Я сделал 2 простых советника, которые прилагаются, я все еще учусь.
1. Покупайте, когда цена выше 100SMA
2. Продавать, когда цена также выше 100SMA
Это означает, что когда вы прикрепляете их к двум разным графикам Eurusd, они должны покупать и продавать в одно и то же время. Теоретически, каждый советник работает самостоятельно.
Но это не так... Похоже, что если сначала идет продажа, то советник на покупку не работает, и наоборот.
Может ли кто-нибудь перекодировать мой советник, управляющий MagicNumber? Что-то не так?
Большое спасибоПохоже, что вы правильно указали магическое число. Единственная проблема в том, что вы не проверяете, существует ли ордер с таким же магическим номером в текущем торговом пуле. Вы должны пройтись по всем открытым ордерам и проверить, если OrderMagicNumber() == Ваш магический номер перед вводом новой сделки.