[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 539 1...532533534535536537538539540541542543544545546...652 新评论 Pazitiv 2012.01.30 21:47 #5381 我正在写一个基于QQEA指标的EA,所以,这个EA的想法是:当红线向上穿过黄线时,应该开一个 买单,而当红线向下穿过黄线时,应该开一个 卖单。但我不能只开一个订单。 只要条件得到满足,订单就会被打开。是的,而且只开了买单,HAYDNT ? // EA代码 //--- input parameters extern double MaxRisk=1.0; extern double FixLot = 0.01; extern double Exponent=2.0; extern int Magic = 888; // костыли extern int TakeProfit=100; extern int StopLoss=100; int init() return(0); } int deinit() { //---- //---- return(0); } int start() { //---- int Count=0; double b0,b1; int ticket; // параметры индикатора int SF = 5; // original 5 int RSI_Period = 14; // original 14 double DARFACTOR = 4.236; //original 4.236 //------------ Параметры из индикатора QQEA ----------------------- // Buffer0 -- красная жирная string Buffer0 = iCustom(NULL, 0, "QQEA" , SF, RSI_Period, DARFACTOR,0 , 0); // Buffer1 -- жёлтый пунктир string Buffer1 = iCustom(NULL, 0, "QQEA" , SF, RSI_Period, DARFACTOR,1 , 0); b0=StrToDouble(Buffer0); b1=StrToDouble(Buffer1); double Lot=GetLot(MaxRisk); // если лот <0 выводим сообщение об ошибке if(Lot==0) { Alert("Недостаточно средств!"); return(0); } if (Lot!=0 && b0>b1) // если лот <> 0 и красная выше жёлтой { ticket=NewOrder(OP_BUY,Lot); if (ExistOrders(Symbol(), 1, 888, 0) == true ) // проверяем наличие ордера sell { CloseOrder(); } } if (Lot!=0 && b0<b1) // если лот <> 0 и красная выше жёлтой { ticket=NewOrder(OP_SELL,Lot); if (ExistOrders(Symbol(), 0, 888, 0) == true ) // проверяем наличие ордера buy { CloseOrder(); } } Comment("Red line: ",b0,"Yellow line: ",b1); return(0); } //------------------------------------------------------------- //расчёт лота double GetLot(int Risk) {double Free =AccountFreeMargin(); double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED); double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT); double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT); double Step =MarketInfo(Symbol(),MODE_LOTSTEP); double Lot =MathFloor(Free*Risk/100/One_Lot/Step)*Step; if(Lot<Min_Lot) Lot=Min_Lot; if(Lot>Max_Lot) Lot=Max_Lot; if(Lot*One_Lot>Free) return(0.0); return(Lot);} bool ExistOrders(string sy="", int op=-1, int Magic=-1, datetime ot=0) { int i, k=OrdersTotal(), ty; if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { ty=OrderType(); if (ty>1 && ty<6) { if ((OrderSymbol()==sy || sy=="") && (op<0 || ty==op)) { if (Magic<0 || OrderMagicNumber()==Magic) { if (ot<=OrderOpenTime()) return(True); } } } } } return(False); } //открытие нового ордера int NewOrder(int Cmd,double Lot) {double TP=0; //тейкпрофит double SL=0; //стоплосс double PR=0; //Цена while(!IsTradeAllowed()) Sleep(100); if(Cmd==OP_BUY) {PR=Ask; if(TakeProfit>0) TP=Ask+TakeProfit*Point; if(StopLoss>0) SL=Ask-StopLoss*Point;} if(Cmd==OP_SELL) {PR=Bid; if(TakeProfit>0) TP=Bid-TakeProfit*Point; if(StopLoss>0) SL=Bid+StopLoss*Point;} int tic=OrderSend(Symbol(),Cmd,Lot,PR,3,SL,TP," ",0,0,Green); if(tic<0) Print("Ошибка открытия ордера: " ,GetLastError()); return(tic);} // закрытие ордера void CloseOrder() {double PR=0; while(!IsTradeAllowed()) Sleep(100); if(OrderType()==OP_BUY) PR=Bid; if(OrderType()==OP_SELL) PR=Ask; if(!OrderClose(OrderTicket(),OrderLots(),PR,3,Red)) Print("Ошибка закрытия ордера: " ,GetLastError()); return;} 附加的文件: qqea_1.mq4 4 kb costy_ 2012.01.30 22:42 #5382 PAZITIV: 我正在写一个基于QQEA指标的EA,所以,这个EA的想法是:当红线向上穿过黄线时,应该开一个 买单,而当红线向下穿过黄线时,应该开一个 卖单。但我不能只开一个订单。 只要条件得到满足,订单就会被打开。是的,而且只开了买单,HAYDNT ? // EA代码 //--- input parameters extern double MaxRisk=1.0; extern double FixLot = 0.01; extern double Exponent=2.0; extern int Magic=888; // костыли extern int TakeProfit=100; extern int StopLoss=100; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { //---- int Count=0; double b0,b1; int ticket; // параметры индикатора int SF=5; // original 5 int RSI_Period=14; // original 14 double DARFACTOR=4.236; //original 4.236 //------------ Параметры из индикатора QQEA ----------------------- // Buffer0 -- красная жирная string Buffer0=iCustom(NULL,0,"QQEA",SF,RSI_Period,DARFACTOR,0,0); // Buffer1 -- жёлтый пунктир string Buffer1=iCustom(NULL,0,"QQEA",SF,RSI_Period,DARFACTOR,1,0); b0=StrToDouble(Buffer0); b1=StrToDouble(Buffer1); double Lot=GetLot(MaxRisk); // если лот <0 выводим сообщение об ошибке if(Lot==0) { Alert("Недостаточно средств!"); return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ if(Lot!=0 && b0>b1) // если лот <> 0 и красная выше жёлтой { ticket=NewOrder(OP_BUY,Lot); if(ExistOrders(Symbol(),1,888,0)==true) // проверяем наличие ордера sell { CloseOrder(); } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ if(Lot!=0 && b0<b1) // если лот <> 0 и красная выше жёлтой { ticket=NewOrder(OP_SELL,Lot); if(ExistOrders(Symbol(),0,888,0)==true) // проверяем наличие ордера buy { CloseOrder(); } } Comment("Red line: ",b0,"Yellow line: ",b1); return(0); } //------------------------------------------------------------- //расчёт лота double GetLot(int Risk) { double Free=AccountFreeMargin(); double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED); double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT); double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT); double Step=MarketInfo(Symbol(),MODE_LOTSTEP); double Lot =MathFloor(Free*Risk/100/One_Lot/Step)*Step; if(Lot<Min_Lot) Lot=Min_Lot; if(Lot>Max_Lot) Lot=Max_Lot; if(Lot*One_Lot>Free) return(0.0); return(Lot); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool ExistOrders(string sy="",int op=-1,int Magic=-1,datetime ot=0) { int i,k=OrdersTotal(),ty; if(sy=="0") sy=Symbol(); for(i=0; i<k; i++) //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { ty=OrderType(); if(ty>1 && ty<6) { if((OrderSymbol()==sy || sy=="") && (op<0 || ty==op)) { if(Magic<0 || OrderMagicNumber()==Magic) { if(ot<=OrderOpenTime()) return(True); } } } } } return(False); } //открытие нового ордера int NewOrder(int Cmd,double Lot) { double TP=0; //тейкпрофит double SL=0; //стоплосс double PR=0; //Цена while(!IsTradeAllowed()) Sleep(100); //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ if(Cmd==OP_BUY) { PR=Ask; if(TakeProfit>0) TP=Ask+TakeProfit*Point; if(StopLoss>0) SL=Ask-StopLoss*Point; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ if(Cmd==OP_SELL) { PR=Bid; if(TakeProfit>0) TP=Bid-TakeProfit*Point; if(StopLoss>0) SL=Bid+StopLoss*Point; } if(GetOrdersCount(Magic,Cmd)>0)return(0); int tic=OrderSend(Symbol(),Cmd,Lot,PR,3,SL,TP," ",0,0,Green); if(tic<0) Print("Ошибка открытия ордера: ",GetLastError()); return(tic); } // закрытие ордера void CloseOrder() { double PR=0; while(!IsTradeAllowed()) Sleep(100); if(OrderType()==OP_BUY) PR=Bid; if(OrderType()==OP_SELL) PR=Ask; if(!OrderClose(OrderTicket(),OrderLots(),PR,3,Red)) Print("Ошибка закрытия ордера: ",GetLastError()); return; } //+------------------------------------------------------------------+ // подсчет кол-ва открытых позиций int GetOrdersCount(int MagicNumber,int Type) { int count=0; for(int i=0; i<OrdersTotal(); i++) { // already closed if(OrderSelect(i,SELECT_BY_POS)==false) continue; // not current symbol if(OrderSymbol()!=Symbol()) continue; // order was opened in another way if(OrderMagicNumber()!=MagicNumber) continue; if(OrderType()==Type) { count++; } } return(count); } //------------------------------------------------------- 用更可读的方式来写,以后会更容易。 Victor Nikolaev 2012.01.30 23:39 #5383 PAZITIV:我正在写一个基于QQEA指标的EA,所以,这个EA的想法是:当红线向上穿过黄线时,应该开一个 买单,而当红线向下穿过黄线时,应该开一个 卖单。但我不能只开一个订单。只要条件得到满足,订单就会被打开。而且只开买单。 //EA代码 让我问你一个问题。 使用字符串类型 的依据是什么? //------------ Параметры из индикатора QQEA ----------------------- // Buffer0 -- красная жирная string Buffer0=iCustom(NULL,0,"QQEA",SF,RSI_Period,DARFACTOR,0,0); // Buffer1 -- жёлтый пунктир string Buffer1=iCustom(NULL,0,"QQEA",SF,RSI_Period,DARFACTOR,1,0); [删除] 2012.01.31 07:46 #5384 double diMA60=iMA(NULL,60,Period_indikatora1,0,Mod_MA,PRICE_CLOSE,sdvig); double diMA30=iMA(NULL,30,Period_indikatora2,0,Mod_MA,PRICE_CLOSE,sdvig) 你们的EA使用了两个不同的时间段(30和60),请告诉我在测试器中放什么时间段,以及EA中的测试期是否不会改变? Рустам 2012.01.31 09:18 #5385 不小于最小值,即在你的案例中是M30 [删除] 2012.01.31 09:36 #5386 这些日志条目是什么意思。 2012.01.31 14:34:45 内存处理程序:无法分配10436536字节的内存 2012.01.31 14:34:45:45 HistoryBase: not enough memory 'EURGBP1' [206996 bars] ?如果有任何问题,有可能修复吗? gince 2012.01.31 10:30 #5387 帮助解决阵列的问题。它并没有按照我想要的方式工作。 有一个价格数组p[]。我需要创建一个新的数组,其长度要少一个元素,而且要算作第一个数组中两个相邻元素的差值。如果差值为负数,则乘以-1。 有P[6]={1, 5, 9, 4, 6, 2, 3}。 我们应该得到 p_diff[5] = {-1*(1-5), -1*(5-9), 9-4, -1*(4-6), 6-2, -1*(2-3)}即p_diff[5] = {4, 4, 5, 2, 4, 1}。 int start() { if( !NewBar() ) return(0); int i, n, k, j = 0; for(i=0; i<=Bars_count; i++) { ZZ[i]=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,i); if(ZZ[i]!=0) { Print(ZZ[j]); j = j + 1; k = j - 1; Print("index = ",k); } } Print("iiii = ", k); for(n = 0; n <= k-1; n++) { ZZ_diff[n] = (ZZ[n] -ZZ[n+1]); if(ZZ_diff[n] < 0) ZZ_diff[n] = ZZ_diff[n] * (-1); Print(ZZ_diff[n], " index diff = ", n); } return(0); } costy_ 2012.01.31 12:28 #5388 -Aleksey-: 这些日志条目是什么意思。 2012.01.31 14:34:45 内存处理程序:无法分配10436536字节的内存 2012.01.31 14:34:45:45 HistoryBase: not enough memory 'EURGBP1' [206996 bars] ?如果有任何问题,有可能修复吗? 增加RAM容量,减少窗口的最大条数。 costy_ 2012.01.31 12:31 #5389 gince:帮助解决阵列的问题。它并没有按照我想要的方式工作。有一个价格数组p[]。我需要创建一个新的数组,其长度要少一个元素,而且要算作第一个数组中两个相邻元素的差值。如果差值为负数,则乘以-1。有P[6]={1, 5, 9, 4, 6, 2, 3}。 我们应该得到p_diff[5] = {-1*(1-5), -1*(5-9), 9-4, -1*(4-6), 6-2, -1*(2-3)}即p_diff[5] = {4, 4, 5, 2, 4, 1}。 doubleMathAbs( 双重值) 该函数返回传递给它的数字的绝对值(模值)。 ZZ_diff[n] = MathAbs(ZZ[n] -ZZ[n+1]); Рустам 2012.01.31 12:36 #5390 double zz_arr[1000]; double preZz=0; int i,ii; for(i=5000;i>=0;i--){ double zz = iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,i); if(zz!=0){ if(preZz==0){preZz=zz;continue;} zz_arr[ii]=MathAbs(zz-preZz); preZz=zz; ii++; } } ArrayResize(zz_arr,ii); 1...532533534535536537538539540541542543544545546...652 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我正在写一个基于QQEA指标的EA,所以,这个EA的想法是:当红线向上穿过黄线时,应该开一个 买单,而当红线向下穿过黄线时,应该开一个 卖单。但我不能只开一个订单。 只要条件得到满足,订单就会被打开。是的,而且只开了买单,HAYDNT ?
//
EA代码
我正在写一个基于QQEA指标的EA,所以,这个EA的想法是:当红线向上穿过黄线时,应该开一个 买单,而当红线向下穿过黄线时,应该开一个 卖单。但我不能只开一个订单。 只要条件得到满足,订单就会被打开。是的,而且只开了买单,HAYDNT ?
//
EA代码
我正在写一个基于QQEA指标的EA,所以,这个EA的想法是:当红线向上穿过黄线时,应该开一个 买单,而当红线向下穿过黄线时,应该开一个 卖单。但我不能只开一个订单。只要条件得到满足,订单就会被打开。而且只开买单。
//
EA代码
让我问你一个问题。
使用字符串类型 的依据是什么?
你们的EA使用了两个不同的时间段(30和60),请告诉我在测试器中放什么时间段,以及EA中的测试期是否不会改变?
这些日志条目是什么意思。
2012.01.31 14:34:45 内存处理程序:无法分配10436536字节的内存
2012.01.31 14:34:45:45 HistoryBase: not enough memory 'EURGBP1' [206996 bars]
?如果有任何问题,有可能修复吗?
帮助解决阵列的问题。它并没有按照我想要的方式工作。
有一个价格数组p[]。我需要创建一个新的数组,其长度要少一个元素,而且要算作第一个数组中两个相邻元素的差值。如果差值为负数,则乘以-1。
有P[6]={1, 5, 9, 4, 6, 2, 3}。
我们应该得到
p_diff[5] = {-1*(1-5), -1*(5-9), 9-4, -1*(4-6), 6-2, -1*(2-3)}即p_diff[5] = {4, 4, 5, 2, 4, 1}。
这些日志条目是什么意思。
2012.01.31 14:34:45 内存处理程序:无法分配10436536字节的内存
2012.01.31 14:34:45:45 HistoryBase: not enough memory 'EURGBP1' [206996 bars]
?如果有任何问题,有可能修复吗?
帮助解决阵列的问题。它并没有按照我想要的方式工作。
有一个价格数组p[]。我需要创建一个新的数组,其长度要少一个元素,而且要算作第一个数组中两个相邻元素的差值。如果差值为负数,则乘以-1。
有P[6]={1, 5, 9, 4, 6, 2, 3}。
我们应该得到
p_diff[5] = {-1*(1-5), -1*(5-9), 9-4, -1*(4-6), 6-2, -1*(2-3)}即p_diff[5] = {4, 4, 5, 2, 4, 1}。
该函数返回传递给它的数字的绝对值(模值)。