如何编码? - 页 18 1...111213141516171819202122232425...347 新评论 [删除] 2006.12.12 11:29 #171 米歇尔。 非常感谢你花时间查看代码并给予答复。 有时需要的只是另一双眼睛! 你是对的,错误在于被0除以一个缺失的条形。 现在都解决了。 BW trevman 2006.12.12 14:38 #172 代码解释 - Ind-Fractals-1 谁能解释一下这个(https://c.mql5.com/forextsd/forum/165/ind-fractals-1.mq4) 指标中的分形是如何确定的。我注意到,像普通的分形一样,它们在转折点和实际分形的绘制之间有一个延迟,但是我想知道这个延迟有多长。我认为一个15分钟的分形是在转折点确定后的40-50个1分钟内绘制的。我还注意到,分形的颜色会改变(尽管它们的位置不会改变),因为一些15分钟的分形会变成1小时的分形。 adamk203 2006.12.20 03:45 #173 如何编写以下代码? 大家好。 我是metatrader 4的新手。我对mt4的编码了解不多。 我想让metatrader在以下情况下发出警报 1.30期简单移动平均线 上升到60期简单移动平均线之上。 2.30期简单移动平均线跌破60期简单移动平均线。 谁能帮我把代码贴在这里吗? 非常感谢 increase 2006.12.20 04:04 #174 adamk203: 大家好。我是metatrader 4的新手。我对mt4的编码了解不多。 我想让metatrader在以下情况下发出警报 1.30期简单移动平均线上升到60期简单移动平均线之上。 2.30期简单移动平均线跌破60期简单移动平均线。 谁能帮我把代码贴在这里? 非常感谢 为什么不使用这个呢?输入你的MA并选择0作为简单的,给你线条和箭头。 附加的文件: trendtest_window.mq4 6 kb adamk203 2006.12.20 05:29 #175 非常感谢~~~ parlenk 2006.12.21 06:19 #176 increase: 为什么不使用这个呢?输入你的MA,选择简单的0,给你提供线条和箭头 你好,我想让信号在2根干净的蜡烛在交叉后完成时出现。 附加的文件: gbp_4h.gif 19 kb [删除] 2006.12.21 22:05 #177 请帮助纠正我的代码 首先,我相信这段代码是非常方便的,很多人都会喜欢它。所以请帮助我改进它。 事实上,这段代码已经很好用了。但我只是厌倦了简单的警报弹出,没有显示符号。所以我改变/添加了一些行来尝试,这就是%%%%%%%%%。 我不知道为什么,打印、注释......不管怎样,都没有发生。 而且,奇怪的是,你可以看到在"----alert----"部分,我把UPBREAK警报改成了别的东西,但它仍然显示 "UP BREAK"。---- 我确信每次我重写代码时,我都会编译它,从图表中删除它,然后重新加载它。 有什么想法吗? #property indicator_chart_window #import "usr32.dll" // %%%%%%%%%% int MessageBoxA(int hWnd,string lpText,string lpCaption,int uType); //%%%%%%%%%% #import //%%%%%%%%%% int PrevAlertTime = 0; int init() { return(0); } int deinit() { return(0); } //+------------------------------------------------------------------+ int start() { int i=ObjectsTotal(); int redtotal=0,j,typ1; double price1,price2,up,down; color col; string name1,name2,nameup,namedown,warn1,sym=Symbol(); warn1=sym + "Break Up"; //%%%%%%%%%% Print(sym); //%%%%%%%%%%% //----make sure exactly 2 red lines on chart--------------------- for (j=0; j<i; j++) if(ObjectGet(ObjectName(j),OBJPROP_COLOR)==255 && ObjectType(ObjectName(j))==OBJ_TREND) { redtotal++; if (redtotal==1) name1=ObjectName(j); if (redtotal==2) name2=ObjectName(j); } if (redtotal==2) { if(ObjectFind("remind")==0) ObjectDelete("remind"); } else { ObjectCreate("remind",OBJ_LABEL,0,0,0); ObjectSet("remind", OBJPROP_XDISTANCE,0); ObjectSet("remind", OBJPROP_YDISTANCE,20); ObjectSetText("remind", "Keep exactly 2 red lines on chart" ,16,"Times New Roman",Blue); return(0); // question here: what should I use, 0 or -1 ? } //--------decide which line is up / down --------------------- price1=NormalizeDouble(ObjectGetValueByShift(name1,1), MarketInfo(Symbol(),MODE_DIGITS)); price2=NormalizeDouble(ObjectGetValueByShift(name2,1), MarketInfo(Symbol(),MODE_DIGITS)); if (price2>=price1) { nameup=name2; namedown=name1; up=price2; down=price1; } else { nameup=name1; namedown=name2; up=price1; down=price2; } //-------- alert ---------------------------------------------- if (TimeCurrent() - PrevAlertTime > Period()*60/3) { if (Close[1]up) { MessageBoxA(NULL,"tupole","11111",0); // %%%%%%%%%% Print(Symbol()); // %%%%%%%%%% PrevAlertTime = TimeCurrent(); } if (Close[1]>=down && Close[0]<down) { Alert("DOWN BREAK",Symbol()); PrevAlertTime = TimeCurrent(); } } return(0); } pls help correct my How to code? object name passed to [删除] 2006.12.24 01:50 #178 我发现了问题所在。 通常情况下,我创建或编辑代码的方式是。"Metaeditor--file--new/open..." 但我刚刚发现:在附加到图表后,然后在这段代码中做了一些改动,最后更多的改动不再影响图表(肯定是我编的!)-----,但 "Metaeditor--navigator--files--my code... "却影响了! 这很奇怪,它们应该是同一段代码! CEO 2007.01.14 22:11 #179 追踪代码的帮助 void TrailIt( int byPips ) // based on trailing stop code from MT site... thanks MT! { if (byPips >=5) { for (int i = 0; i < OrdersTotal(); i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) ) // only look if mygrid and symbol... { if (OrderType() == OP_BUY) { //if (Bid > (OrderValue(cnt,VAL_OPENPRICE) + TrailingStop * Point)) { // OrderClose(OrderTicket(), OrderLots(), Bid, 3, Violet); // break; //} if (Bid - OrderOpenPrice() > byPips * MarketInfo(OrderSymbol(), MODE_POINT)) { if (OrderStopLoss() < Bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT)) { OrderModify(OrderTicket(), OrderOpenPrice(), Bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red); } } } else if (OrderType() == OP_SELL) { if (OrderOpenPrice() - Ask > byPips * MarketInfo(OrderSymbol(), MODE_POINT)) { if ((OrderStopLoss() > Ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT)) || (OrderStopLoss() == 0)) { OrderModify(OrderTicket(), OrderOpenPrice(), Ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red); } } } } } } } // proc TrailIt() 这就是代码。从附件中可以看出,在一个订单上,它会修改止损点,但也会以错误的方向修改,我无法解决这个问题。我真的很感谢你帮助我找到解决方案 附加的文件: ordermodify.txt 40 kb 请高手修改保平止损和追踪止损EA代码 How to code? 退出策略。阶梯式止损与拖曳式止损 Nicholishen 2007.01.15 01:51 #180 试试这个。看起来你可能是想用不同的符号来修改订单。 如果是这样,买入和卖出将只从EA所附的图表窗口的符号中提取市场数据。 使用MarketData(symbol, MODE_BID)是获得适当数据的方法。 void TrailIt( int byPips ) // based on trailing stop code from MT site... thanks MT! { if (byPips >=5) { for (int i = 0; i < OrdersTotal(); i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); double bid=MarketInfo(OrderSymbol(),MODE_BID); double ask=MarketInfo(OrderSymbol(),MODE_ASK); if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) ) // only look if mygrid and symbol... { if (OrderType() == OP_BUY) { if (bid - OrderOpenPrice() >= byPips * MarketInfo(OrderSymbol(), MODE_POINT)) { if (OrderStopLoss() < bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT)|| (OrderStopLoss() == 0)) { OrderModify(OrderTicket(), OrderOpenPrice(), bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red); } } } else if (OrderType() == OP_SELL) { if (OrderOpenPrice() - ask >= byPips * MarketInfo(OrderSymbol(), MODE_POINT)) { if ((OrderStopLoss() > ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT)) || (OrderStopLoss() == 0)) { OrderModify(OrderTicket(), OrderOpenPrice(),ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red); } } } } } } return; } 请高手修改保平止损和追踪止损EA代码 How to code? 退出策略。阶梯式止损与拖曳式止损 1...111213141516171819202122232425...347 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
米歇尔。
非常感谢你花时间查看代码并给予答复。 有时需要的只是另一双眼睛! 你是对的,错误在于被0除以一个缺失的条形。 现在都解决了。
BW
代码解释 - Ind-Fractals-1
谁能解释一下这个(https://c.mql5.com/forextsd/forum/165/ind-fractals-1.mq4) 指标中的分形是如何确定的。我注意到,像普通的分形一样,它们在转折点和实际分形的绘制之间有一个延迟,但是我想知道这个延迟有多长。我认为一个15分钟的分形是在转折点确定后的40-50个1分钟内绘制的。我还注意到,分形的颜色会改变(尽管它们的位置不会改变),因为一些15分钟的分形会变成1小时的分形。
如何编写以下代码?
大家好。
我是metatrader 4的新手。我对mt4的编码了解不多。
我想让metatrader在以下情况下发出警报
1.30期简单移动平均线 上升到60期简单移动平均线之上。
2.30期简单移动平均线跌破60期简单移动平均线。
谁能帮我把代码贴在这里吗?
非常感谢![](https://c.mql5.com/forextsd/smiles/regular_smile.png)
大家好。
我是metatrader 4的新手。我对mt4的编码了解不多。
我想让metatrader在以下情况下发出警报
1.30期简单移动平均线上升到60期简单移动平均线之上。
2.30期简单移动平均线跌破60期简单移动平均线。
谁能帮我把代码贴在这里?
非常感谢为什么不使用这个呢?输入你的MA并选择0作为简单的,给你线条和箭头。
非常感谢~~~![](https://c.mql5.com/forextsd/smiles/teeth_smile.png)
为什么不使用这个呢?输入你的MA,选择简单的0,给你提供线条和箭头
你好,我想让信号在2根干净的蜡烛在交叉后完成时出现。
请帮助纠正我的代码
首先,我相信这段代码是非常方便的,很多人都会喜欢它。所以请帮助我改进它。
事实上,这段代码已经很好用了。但我只是厌倦了简单的警报弹出,没有显示符号。所以我改变/添加了一些行来尝试,这就是%%%%%%%%%。
我不知道为什么,打印、注释......不管怎样,都没有发生。
而且,奇怪的是,你可以看到在"----alert----"部分,我把UPBREAK警报改成了别的东西,但它仍然显示 "UP BREAK"。---- 我确信每次我重写代码时,我都会编译它,从图表中删除它,然后重新加载它。
有什么想法吗?
#property indicator_chart_window
#import "usr32.dll" // %%%%%%%%%%
int MessageBoxA(int hWnd,string lpText,string lpCaption,int uType); //%%%%%%%%%%
#import //%%%%%%%%%%
int PrevAlertTime = 0;
int init()
{
return(0);
}
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
int start()
{
int i=ObjectsTotal();
int redtotal=0,j,typ1;
double price1,price2,up,down;
color col;
string name1,name2,nameup,namedown,warn1,sym=Symbol();
warn1=sym + "Break Up"; //%%%%%%%%%%
Print(sym); //%%%%%%%%%%%
//----make sure exactly 2 red lines on chart---------------------
for (j=0; j<i; j++)
if(ObjectGet(ObjectName(j),OBJPROP_COLOR)==255 && ObjectType(ObjectName(j))==OBJ_TREND)
{ redtotal++;
if (redtotal==1) name1=ObjectName(j);
if (redtotal==2) name2=ObjectName(j);
}
if (redtotal==2)
{
if(ObjectFind("remind")==0) ObjectDelete("remind");
}
else
{
ObjectCreate("remind",OBJ_LABEL,0,0,0);
ObjectSet("remind", OBJPROP_XDISTANCE,0);
ObjectSet("remind", OBJPROP_YDISTANCE,20);
ObjectSetText("remind", "Keep exactly 2 red lines on chart" ,16,"Times New Roman",Blue);
return(0); // question here: what should I use, 0 or -1 ?
}
//--------decide which line is up / down ---------------------
price1=NormalizeDouble(ObjectGetValueByShift(name1,1),
MarketInfo(Symbol(),MODE_DIGITS));
price2=NormalizeDouble(ObjectGetValueByShift(name2,1),
MarketInfo(Symbol(),MODE_DIGITS));
if (price2>=price1)
{
nameup=name2; namedown=name1;
up=price2; down=price1;
}
else
{ nameup=name1; namedown=name2;
up=price1; down=price2;
}
//-------- alert ----------------------------------------------
if (TimeCurrent() - PrevAlertTime > Period()*60/3)
{
if (Close[1]up)
{ MessageBoxA(NULL,"tupole","11111",0); // %%%%%%%%%%
Print(Symbol()); // %%%%%%%%%%
PrevAlertTime = TimeCurrent();
}
if (Close[1]>=down && Close[0]<down)
{ Alert("DOWN BREAK",Symbol());
PrevAlertTime = TimeCurrent();
}
}
return(0);
}
我发现了问题所在。
通常情况下,我创建或编辑代码的方式是。"Metaeditor--file--new/open..."
但我刚刚发现:在附加到图表后,然后在这段代码中做了一些改动,最后更多的改动不再影响图表(肯定是我编的!)-----,但 "Metaeditor--navigator--files--my code... "却影响了! 这很奇怪,它们应该是同一段代码!
追踪代码的帮助
{
if (byPips >=5)
{
for (int i = 0; i < OrdersTotal(); i++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) ) // only look if mygrid and symbol...
{
if (OrderType() == OP_BUY) {
//if (Bid > (OrderValue(cnt,VAL_OPENPRICE) + TrailingStop * Point)) {
// OrderClose(OrderTicket(), OrderLots(), Bid, 3, Violet);
// break;
//}
if (Bid - OrderOpenPrice() > byPips * MarketInfo(OrderSymbol(), MODE_POINT)) {
if (OrderStopLoss() < Bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red);
}
}
} else if (OrderType() == OP_SELL) {
if (OrderOpenPrice() - Ask > byPips * MarketInfo(OrderSymbol(), MODE_POINT)) {
if ((OrderStopLoss() > Ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT)) ||
(OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(),
Ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red);
}
}
}
}
}
}
} // proc TrailIt()这就是代码。从附件中可以看出,在一个订单上,它会修改止损点,但也会以错误的方向修改,我无法解决这个问题。我真的很感谢你帮助我找到解决方案
试试这个。看起来你可能是想用不同的符号来修改订单。 如果是这样,买入和卖出将只从EA所附的图表窗口的符号中提取市场数据。 使用MarketData(symbol, MODE_BID)是获得适当数据的方法。
{
if (byPips >=5)
{
for (int i = 0; i < OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
double bid=MarketInfo(OrderSymbol(),MODE_BID);
double ask=MarketInfo(OrderSymbol(),MODE_ASK);
if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) ) // only look if mygrid and symbol...
{
if (OrderType() == OP_BUY)
{
if (bid - OrderOpenPrice() >= byPips * MarketInfo(OrderSymbol(), MODE_POINT))
{
if (OrderStopLoss() < bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT)|| (OrderStopLoss() == 0))
{
OrderModify(OrderTicket(), OrderOpenPrice(), bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red);
}
}
}
else if (OrderType() == OP_SELL)
{
if (OrderOpenPrice() - ask >= byPips * MarketInfo(OrderSymbol(), MODE_POINT))
{
if ((OrderStopLoss() > ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT)) || (OrderStopLoss() == 0))
{
OrderModify(OrderTicket(), OrderOpenPrice(),ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red);
}
}
}
}
}
}
return;
}