问吧! - 页 157

 

试试这样的方法。

string uniqueFileName()

{

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()。

问候

毫升登

tedalagi:
大家好。

我是一名交易员,但我不懂mq4语言,从星期二开始就一直在尝试这样做 ...

我需要用一个脚本将我的图表保存为csv格式。我有一个很好的脚本,我可以简单地把它拖到任何图表和任何时间框架上,它做得很好,除了文件名。

我希望它能在我每次保存图表时自动生成唯一的文件名,这样我就不必每次在同一文件夹中保存另一个文件时都要重命名它。

string fname =[date in YYYYMMDD format]+ "_"+[date - hour only]+"_" + Symbol() + Period() + " .csv"。

有问题的代码用粗体表示。

当我的代码正确时,我想输出的文件名会是这样的

20090924_10_GBPJPY15.csv

对不起,我不能花很多时间来阅读这个巨大的主题的157页(我曾试过,但我的头晕了)。

预先感谢你。
 
 
 
mladen:
像这样使用(Mql不允许嵌套函数或过程,所以函数或过程必须是一个单独的函数或过程)

它工作得很好,非常感谢你。

mladen。

关于在任何地方保存文件:是的,可以使用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?有什么问题吗?

谢谢

附加的文件:
buy100ma.mq4  9 kb
sell100ma.mq4  9 kb
 
Ghosthand:
嗨,伙计们,我真的不知道MagicNumber是如何工作的,因为它似乎是不工作的????。我做了两个简单的EA,我还在学习。

1.当价格高于100SMA时买入

2.当价格也高于100SMA时卖出

这意味着当你把它们连接到两个不同的欧元图表上时,它应该是一个买入和一个卖出同时进行。理论上,每个EA都是独立工作的。

但事实并非如此...好像当卖出的时候,买入的EA就不工作了,反之亦然。

谁能重新编码我的EA,控制MagicNumber?有什么问题吗?

非常感谢

看上去你的魔力数字是正确的。唯一的问题是,你没有检查 当前交易池中是否存在具有相同魔法号码的订单。在进入新的交易之前,你应该检查所有未结订单,并检查OrderMagicNumber() ==你的魔法数字。

原因: