如何编码? - 页 18

 

米歇尔。

非常感谢你花时间查看代码并给予答复。 有时需要的只是另一双眼睛! 你是对的,错误在于被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期简单移动平均线。

谁能帮我把代码贴在这里吗?

非常感谢

 
adamk203:
大家好。

我是metatrader 4的新手。我对mt4的编码了解不多。

我想让metatrader在以下情况下发出警报

1.30期简单移动平均线上升到60期简单移动平均线之上。

2.30期简单移动平均线跌破60期简单移动平均线。

谁能帮我把代码贴在这里?

非常感谢

为什么不使用这个呢?输入你的MA并选择0作为简单的,给你线条和箭头。

附加的文件:
 

非常感谢~~~

 
increase:
为什么不使用这个呢?输入你的MA,选择简单的0,给你提供线条和箭头

你好,我想让信号在2根干净的蜡烛在交叉后完成时出现。

附加的文件:
gbp_4h.gif  19 kb
 

请帮助纠正我的代码

首先,我相信这段代码是非常方便的,很多人都会喜欢它。所以请帮助我改进它。

事实上,这段代码已经很好用了。但我只是厌倦了简单的警报弹出,没有显示符号。所以我改变/添加了一些行来尝试,这就是%%%%%%%%%。

我不知道为什么,打印、注释......不管怎样,都没有发生。

而且,奇怪的是,你可以看到在"----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... "却影响了! 这很奇怪,它们应该是同一段代码!

 

追踪代码的帮助

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所附的图表窗口的符号中提取市场数据。 使用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;

}