如何编码? - 页 265

 

未知的子窗口编号

编码员朋友们好

有谁能解决这个关于iCustom调用的问题,我已经尝试了所有我能想到的方法,但在Experts标签中仍然有同样的信息。

ObjectCreate函数 的未知子窗口号-1

Regards CJA

 

删除 指标中的子窗口调用

cja:
编码员朋友们好

有谁能解决这个iCustom调用的问题,我已经尝试了所有我能想到的方法,但在专家标签中仍然有同样的信息。

ObjectCreate函数的未知子窗口数-1

尊敬的CJA

你好,CJA。

我有一个解决方法,我用来解决这个问题。

你的EA在iCustom中调用的指标正试图找到一个子窗口来绘制它的对象。

在大多数情况下,你不需要你的指标绘制任何东西,只是向你的EA提供指标值。

我的解决方案是复制一个指标,删除子窗口调用和对象绘制程序。

这就消除了子窗口的错误,并使EA运行得更快。

然后在你的EA的iCustom语句中使用这个新的指标名称。

我确信可能有更好的代码解决方案,但这对我来说是有效的。

希望这有帮助。

罗伯特

 

iCustom subwindow错误

cosmiclifeform:
嗨,CJA。

我有一个解决方法,我用来解决这个问题。

你的EA在iCustom中调用的指标正试图找到一个子窗口来绘制它的对象。

在大多数情况下,你不需要你的指标绘制任何东西,只是向你的EA提供指标值。

我的解决方案是复制一个指标,删除子窗口调用和对象绘制程序。

这就消除了子窗口的错误,并使EA运行得更快。

然后在你的EA的iCustom语句中使用这个新的指标名称。

我确信可能有更好的代码解决方案,但这对我来说是有效的。

希望这有帮助。

罗伯特

谢谢你,罗伯特--你的建议很有效,但是我怀疑一定有其他的方法,尽管我在网上搜索了一下,没有发现任何有效的解决方案,也没有找到任何意义,只是有很多问题,没有答案。所以再次感谢您的帮助。

谢谢你,CJA

 

CJA

只是一个建议:为什么不使用(当用iCustom()调用时)一个参数 来传递所需的窗口号?比如:如果(ParameterWindowID>=0),那么它就来自iCustom,否则就做一些默认代码

这样你就可以强制它绘制对象,即使是从另一个代码中调用,它也会在一个正确的地方绘制对象。

 

编码方面的帮助

你好,各位。

谁能告诉我是否可以在电子邮件警报报告中使用BOLD textFONTtype?如果可以的话,我应该如何编码?

谢谢你的帮助。

 
codersguru:
你是说如何保存为CSV文件吗?

看看这个。

工具 - .csv阅读器

你好,Guru。

在您的网站上有什么地方可以让我下载这个dll吗?我认为这是一个很好的工具,而且我很肯定你能比我写得更好,所以我不会费心去写。提前感谢。

我需要注册吗?这位于下载部分,但我搞不清楚如何下载任何东西。

 

快速修改EA

你好。

需要一些帮助,我试着修改下面的代码,但EA一直让MT4崩溃。

我希望订单在当前条形图(即执行订单的条形图)收盘时关闭。基本上是交易一个柱子。

这是原来的代码,它从信号到信号进行交易。

//+------------------------------------------------------------------+

//| Signal Begin(Exit Buy) |

//+------------------------------------------------------------------+

if (signaldown!=EMPTY_VALUE&&signaldown!=0) Order = SIGNAL_CLOSEBUY;

//+------------------------------------------------------------------+

//| Signal End(Exit Buy) |

//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

} else {

//Close

//+------------------------------------------------------------------+

//| Signal Begin(Exit Sell) |

//+------------------------------------------------------------------+

if (signalup!=EMPTY_VALUE&&signalup!=0) Order = SIGNAL_CLOSESELL;

//+------------------------------------------------------------------+

//| Signal End(Exit Sell) |

//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {

if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

}

}

}

//+------------------------------------------------------------------+

//| Signal Begin(Entry) |

//+------------------------------------------------------------------+

//if (timeprev!=Time[0]){

// timeprev = Time[0];

if (signalup!=EMPTY_VALUE&&signalup!=0)

{

Order = SIGNAL_BUY;

}

if (signaldown!=EMPTY_VALUE&&signaldown!=0){

Order = SIGNAL_SELL;

}

// }

//+------------------------------------------------------------------+

//| Signal End |

//+------------------------------------------------------------------+

//Buy

if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Check free margin

if (AccountFreeMargin() < (100 * Lots)) {

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("BUY order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

} else {

Print("Error opening BUY order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

//Sell

if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Check free margin

if (AccountFreeMargin() < (100 * Lots)) {

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("SELL order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");

} else {

Print("Error opening SELL order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

if (!EachTickMode) BarCount = Bars;

return(0);

}

//+------------------------------------------------------------------+

谁能帮帮我?

 

我还发现了这个代码。

if(data!=iTime(Symbol(),0,0))

{

if(signalup!=EMPTY_VALUE&&signalup!=0)

{

if(openpos()>0)

{

for(i=0;i<OrdersTotal();i++)

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

{

if(OrderType()==OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==mn)

{

if(OrderClose(OrderTicket(),lots,Ask,slip))

Print("short was closed");

}

}

}

Print("try open long");

Print(Symbol());

nt=OrderSend(Symbol(),OP_BUY,lots,Ask,slip,0,0,"ab",mn,0,Green);

if(nt>0)

Print("long order was opened");

}

if(signaldown!=EMPTY_VALUE&&signaldown!=0)

{

if(openpos()>0)

{

for(i=0;i<OrdersTotal();i++)

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

{

if(OrderType()==OP_BUY&&OrderSymbol()==Symbol()&&OrderMagicNumber()==mn)

{

if(OrderClose(OrderTicket(),lots,Bid,slip))

Print("long was closed");

}

}

}

Print("try open short");

Print(Symbol());

nt=OrderSend(Symbol(),OP_SELL,lots,Bid,slip,0,0,"ab",mn,0,Red);

if(nt>0)

Print("short was opened");

}

data=iTime(Symbol(),0,0);

}

//----

//----

return(0);

}

//+------------------------------------------------------------------+

int openpos()

{

int j=0;

int i,n;

n=OrdersTotal();

for(i=0;i<n;i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)

if(OrderSymbol()==Symbol()&&OrderMagicNumber()==mn&&(OrderType()==OP_SELL||OrderType()==OP_BUY))

j++;

}

return(j);

有没有专家能告诉我哪一个写得更好?

 

一对订单的盈亏平衡(魔术)。

大家好。

我想用魔法收集一个货币对的所有订单(买入和卖出),如果它们达到盈亏平衡,所有的订单应该被关闭。

非常欢迎任何指导,谢谢

extern bool PairBreakeven=true;//每对订单的盈亏平衡点是同一对/魔法的所有订单。

extern double Pairbreakevengain=6;//实现收支平衡所需的点数收益

extern double Pairbreakeven=3;//收支平衡,订单关闭,3点利润/损失。

双倍Pairmovebreakeven;

如果(PairBreakeven=true){

if(Pairbreakevengain>0)Pairmovebreakeven(Pairbreakevengain,Pairbreakeven);

CloseBuyOrders(Magic);

CloseSellOrders(Magic)。

}

void Pairmovebreakeven(double Pairbreakevengain,double Pairbreakeven){

RefreshRates();

如果(OrdersTotal()>0){

for(int i=OrdersTotal();i>=0;i++){

OrderSelect(i,SELECT_BY_POS,MODE_TRADES)。

如果(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic ){

返回。

}

}

}

}

int CloseBuyOrders(int Magic){ //op_sell类似

int total=OrdersTotal();

for(int cnt=total-1;cnt>=0;cnt--){

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)。

如果(OrderMagicNumber()==Magic && OrderSymbol()==Symbol()){

如果(OrderType()==OP_BUY){

OrderClose(OrderTicket(),OrderLots(), Bid,3*mt)。

}

}

}

return(0);

}

 

有3个或更多维度的ArraySort。

有哪位专家能在这方面提供帮助?

我已经试过对一维或二维数组成功地使用arraysort。但在3维数组中被卡住了。据我所知,Arrayort使用 第一列进行排序。谁能告诉我如何解决3维或更多维度的数组排序问题?

bool Restart = true;

double arraystore[20][20][20];

double ArrayActual[20] = {1.23,3.65,0.02,5.44,0.92,0.11,1.21,999.0,555.5,0.0001,44.221,1.01,0.002};

void init()

{

if (Restart == true)

{

Go();

Restart = false;

}

}

void start()

{

}

void Go()

{

for (int a = 1; a<=3; a++)

{

for (int b = 1; b<=6; b++)

{

int c = b+ (a-1)*6;

arraystore[a][0] = ArrayActual[c];

arraystore[a][1] = a;

arraystore[a][2] = b +a;

Print ( arraystore[a][0] + " . " + arraystore[a][1] + " . " + arraystore[a][2]);

}

}

ArraySort(arraystore,WHOLE_ARRAY,1,MODE_DESCEND);

for ( a = 1; a<=3; a++)

{

for ( b = 1; b<=6; b++)

{

Print ( arraystore[a][0] + " . " + arraystore[a][1] + " . " + arraystore[a][2]);

}

}

}
原因: