}[/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 :
试试这样的方法。
{
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()。
问候
毫升登
大家好。
我是一名交易员,但我不懂mq4语言,从星期二开始就一直在尝试这样做 ...
我需要用一个脚本将我的图表保存为csv格式。我有一个很好的脚本,我可以简单地把它拖到任何图表和任何时间框架上,它做得很好,除了文件名。
我希望它能在我每次保存图表时自动生成唯一的文件名,这样我就不必每次在同一文件夹中保存另一个文件时都要重命名它。
string fname =[date in YYYYMMDD format]+ "_"+[date - hour only]+"_" + Symbol() + Period() + " .csv"。
有问题的代码用粗体表示。
当我的代码正确时,我想输出的文件名会是这样的
20090924_10_GBPJPY15.csv
对不起,我不能花很多时间来阅读这个巨大的主题的157页(我曾试过,但我的头晕了)。
预先感谢你。像这样使用(Mql不允许嵌套函数或过程,所以函数或过程必须是一个单独的函数或过程)
它工作得很好,非常感谢你。
关于在任何地方保存文件:是的,可以使用windows API来完成。这里有一个链接,有一个很好的例子和一个很好的解释,如何做到这一点。通过WinAPI的文件操作 - MQL4文章
我将学习一下,之后我一定会回到这个主题。
愿上帝保佑你。
"重复输入"。为什么我的程序不能工作?
对不起:我早些时候发过这个帖子,但我无法在论坛上重新定位这个帖子。
(它也不允许从我的电脑历史中获得 "书签"...)
总之,我写了一个简单的程序,测试两个连续的柱子是 "上升 "还是 "下降"。
即:在 "上升 "时,条形图1的高点高于条形图2,条形图1的低点也高于条形图2。
也比第2条高。(下降是对称的)。
该程序适用于突破,因此在 "上升 "时,条形图1的高点减去条形图2的低点
应该高于某个阈值。("下跌 "是对称的)。
现在使用的是M30英镑兑美元。用眼球挑选这个""突破阈值"。
和 "止盈 "一样。止损是在程序中指出的。
所以:试图获得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;
//------------------------------------down顺序开始
如果(ABC == 0)//没有订单出来是真的
OrdTot_OK = true。
如果(ABC == 0)//没有订单出局为真
打印("在下跌订单序列中,没有订单出局")。
如果((C-D) > Size1)//2的高点减1的低点>.0063
BigDown = true。
如果((C-D) > Size1)//2的高点减去1的低点 > .0063
Print ("在下跌订单序列中,发现了一个大的向下突破")。
如果(High[1]<High[2])
High2down=true。
如果(High[1]<High[2])
Print ("在向下的订单序列中,连续的条形图有递减的高点")。
如果(Low[1]< Low[2])
Low2down=true。
如果(Low[1]<Low[2])
Print ("在下单序列中,连续的条形图有递减的低点")。
如果(High2down && Low2down)
TrendDown=true。
如果(High2down && Low2down)
Print ("在下跌订单序列中,TrendDown标志被设置")。
如果(TrendDown)
SL_Trailing_Down = High[1];
如果(TrendDown)
Print ("在下跌订单序列中,确实设置了止损")。
如果(TrendDown)
TakeProfitDown = Bid - (.005);
如果(TrendDown)
Print ("在下跌订单序列中,得到了一个止盈", TakeProfitDown);
如果(TrendDown && BigDown)
DownAndBig = true。
如果(DownAndBig && OrdTot_OK)
ticketdown= OrderSend(Symbol(),OP_SELL,lot, Bid,slip,SL_Trailing_Down,TakeProfitDown,Blue)。
如果(DownAndBig && OrdTot_OK)
Print ("在下跌订单序列中,试图输入一张票", ticketdown);
如果(ticketdown < 0)
Print("OrderSend_Down失败,错误#",GetLastError())。
return(0);
//----------------------------------------------down order done
//---------------------------------------------------up order start
如果(ABC == 0)
OrdTot_OK = true。
如果(ABC == 0)
打印("在上升序列中,没有订单出来")。
如果 ((A - B) > Size1)
BigUp = true。
如果((A - B) > Size1)
Print ("在上升序列中,两个柱子的大小测试是确定的")。
如果(High[1] > High[2])
High2Up = true;//44
如果(High[1] > High[2])
Print ("在上升序列中,增加高点的测试是确定的")。
如果(Low[1] > Low[2])
Low2Up=true。
如果(Low[1] > Low[2])
Print ("在上升序列中,对增加的低点的测试是确定的")。
如果(High2Up && Low2Up)
TrendUp1=true。
如果(High2Up && Low2Up)
Print ("在上升序列中,确实设置了上升的标志")。
如果(TrendUp1)
SL_Trailing_Up = Low[1] ;
如果(TrendUp1)
Print ("在上升的序列中,建立了止损")。
如果(TrendUp1)
TakeProfitUp = Ask + (.005);
如果(TrendUp1)
Print ("在上升的序列中,建立了止盈", TakeProfitUp);
如果(TrendUp1 && BigUp)
UpAndBig = true。
如果( UpAndBig && OrdTot_OK)
ticketup = OrderSend(Symbol(), OP_BUY,lot, Ask,slip, SL_Trailing_Up, TakeProfitUp,Red);
如果(UpAndBig && OrdTot_OK)
Print ("在上升序列中,试图发送一个订单",ticketup)。
如果(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
睡眠|IsTradeContextBusy
向CodeMasters和其他所有人问好
我有一个基于分形的EA,它在一个MT4平台上使用,并在D1时间框架上使用多个货币对。
由于EA的多个副本在同一时刻进行交易,我在日志中收到了 "交易背景繁忙 "的通知。
我想在我的EA中插入睡眠或IsTradeContextBusy功能,但不知道该放在哪里。
- 在发送订单功能之后,分别为卖出和买入功能?
- 在卖出和买入发送订单功能之后?
- 如何解决这个问题--用
if (IsTradeContextBusy() == true) Sleep (5000); return;
???
请给我建议或指出解决方案。
非常感谢您的帮助。
祝您愉快。
西蒙
附上EA。
需要建议!
你好。
我真的很感谢一个程序员帮助我解决我的一个问题,我正在失去金钱。我有一个EA,它应该在某个价格水平开仓,但有时鞭打会导致它开仓过多。我想让它只开一个。谁能告诉我,这可以用一行代码来解决,还是我需要雇佣一个程序员?
谢谢你。
请建议
嗨,伙计们,我真的不知道MagicNumber是如何工作的,因为它似乎不工作????。 我已经做了2个简单的EA,我还在学习中。
1.当价格高于100SMA时买入
2.当价格也在100SMA以上时卖出
这意味着当你把它们连接到两个不同的欧元图表 上时,它应该是一个买入和一个卖出的同时。从理论上讲,每个EA都是独立工作的。
但事实并非如此...好像当卖出的时候,买入的EA就不工作了,反之亦然。
谁能重新编码我的EA,控制MagicNumber?有什么问题吗?
谢谢
嗨,伙计们,我真的不知道MagicNumber是如何工作的,因为它似乎是不工作的????。我做了两个简单的EA,我还在学习。
1.当价格高于100SMA时买入
2.当价格也高于100SMA时卖出
这意味着当你把它们连接到两个不同的欧元图表上时,它应该是一个买入和一个卖出同时进行。理论上,每个EA都是独立工作的。
但事实并非如此...好像当卖出的时候,买入的EA就不工作了,反之亦然。
谁能重新编码我的EA,控制MagicNumber?有什么问题吗?
非常感谢看上去你的魔力数字是正确的。唯一的问题是,你没有检查 当前交易池中是否存在具有相同魔法号码的订单。在进入新的交易之前,你应该检查所有未结订单,并检查OrderMagicNumber() ==你的魔法数字。