如何编码? - 页 160

 
increase:
似乎从来没有人帮助过我,请回答

通过适度的猜测,我认为问题出在指标上,或者你对它的扩展,而不是你对iCustom的使用。也许将缓冲区2和3与警报一起分配会更好?(尽管我不知道如何/何时分配它们的索引零([0])值。)

 

价格数据信息

我的出场和进场是基于信号在下一个柱状体的开盘时产生的条件(进场和出场),我是否应该使用开盘价来做指标和移动平均线?我一直使用日终数据进行股票交易,所以自然而然地,我就倾向于使用日终数据。外界的共识是什么?

 

只是在想

你如何在货币对的最低止损水平 上设置追踪止损,因此如果止损水平是4点或25点,那么根据货币对的情况,追踪止损将在这个水平上启动。

我应该说,你是如何使用每个货币对的合约规格的。

谢谢

贝诺

 

Sidus_Bago指标

你好,增加。

我想知道你是否可以帮助我将Sidus_Bago编码为MTF指标。我认为这个指标也很好。

Sidus_Bago在这里。

Sidus系统确认 "指标?

非常感谢你。

 

谁能帮我解决这个EA?

大家好。

我对我的第一个EA进行了尝试,但它无法编译;我得到一个错误"'程序结束'--左括号不平衡",我已经看了几遍,但找不到问题所在。 不要担心交易策略的逻辑(除非你热衷于此),一旦编译和运行,我就会着手解决这个问题......

显然,我没有权限附加文件,所以对剪切和粘贴也感到抱歉。

谢谢。

罗伯。

珀斯,澳大利亚

//---------------

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

//| 罗伯-考辛斯|罗伯-考辛斯|Rob_Ea.mq4

罗伯-考辛斯 | //| 罗伯-考辛斯

//| |

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

#财产版权 "Rob Cousins"

#property link ""

#define MAGICMA 20090216

//---- 输入参数

extern double Lots;

extern int Short_MA=5;

extern int Long_MA=15;

extern double Stoch_Upper=70.0;

extern double Stoch_Lower=30.0;

外部双倍RSI_Upper=80.0。

extern double RSI_Lower=20.0;

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

//|专家初始化函数|

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

int init()

{

//----

//----

return(0);

}

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

//|专家的去初始化功能|

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

int deinit()

{

//----

//----

return(0);

}

string Current_Indication()

{

// 移动平均数的变量

double MA_Short;

double MA_Long;

string Current_MA_Indicator;

string Previous_MA_Indicator;

string MA_Indicator;

// 随机变量

string Current_Stoch_Indicator;

string Previous_Stoch_Indicator;

string Stoch_Indicator;

// RSI变量

string Current_RSI_Indicator;

string Previous_RSI_Indicator;

string RSI_Indicator;

// --------------------------------------

// 首先得到MAs,并检查MA交叉点

// --------------------------------------

MA_Short=iMA(NULL,0,Short_MA,0,1,PRICE_MEDIAN,0)。

MA_Long=iMA(NULL,0,Long_MA,0,0,PRICE_MEDIAN,0)。

如果(MA_Short>MA_Long) Current_MA_Indicator="BUY";

如果 (MA_Short<MA_Long) Current_MA_Indicator="SELL";

//使用移位的MA(选项中的最后一个'1')设置前值和现值

if (iMA(NULL,0,Short_MA,0,1,PRICE_MEDIAN,1)>iMA(NULL,0,Long_MA,0,0,PRICE_MEDIAN,1))Previous_MA_Indicator="BUY"。

如果(iMA(NULL,0,Short_MA,0,1,PRICE_MEDIAN,1)<iMA(NULL,0,Long_MA,0,0,PRICE_MEDIAN,1))Previous_MA_Indicator="SELL";

如果((Current_MA_Indicator=="BUY") && (Previous_MA_Indicator=="BUY"))MA_Indicator="BUY"。

如果((Current_MA_Indicator=="SELL") && (Previous_MA_Indicator=="SELL"))MA_Indicator="SELL"。

// ----------------------------

// 随机指标检查

// ----------------------------

if(iStochastic(NULL,0,6,3,3,MODE_SMA,0,MODE_MAIN,0)>Stoch_Upper) Current_Stoch_Indicator="BUY";

if(iStochastic(NULL,0,6,3,3,MODE_SMA,0,MODE_MAIN,0)<Stoch_Lower) Current_Stoch_Indicator="SELL";

if(iStochastic(NULL,0,6,3,3,MODE_SMA,0,MODE_MAIN,1)>Stoch_Upper) Previous_Stoch_Indicator="BUY";

如果(iStochastic(NULL,0,6,3,3,MODE_SMA,0,MODE_MAIN,1)<Stoch_Lower) Previous_Stoch_Indicator="SELL";

如果((Current_Stoch_Indicator=="BUY") && (Previous_Stoch_Indicator=="BUY"))Stoch_Indicator="BUY";

如果((Current_Stoch_Indicator=="SELL") && (Previous_Stoch_Indicator=="SELL"))Stoch_Indicator="SELL"。

// ----------------------------

// RSI指标检查

// ----------------------------

if(iRSI(NULL,0,3,PRICE_CLOSE,0)>RSI_Upper) Current_RSI_Indicator="BUY";

如果(iRSI(NULL,0,3,PRICE_CLOSE,0)<RSI_Lower) Current_RSI_Indicator="SELL";

如果(iRSI(NULL,0,3,PRICE_CLOSE,1)>RSI_Upper) Previous_RSI_Indicator="BUY";

如果(iRSI(NULL,0,3,PRICE_CLOSE,1)<RSI_Lower) Previous_RSI_Indicator="SELL";

如果((Current_RSI_Indicator=="BUY") && (Previous_RSI_Indicator=="BUY"))RSI_Indicator="BUY"。

如果((Current_RSI_Indicator=="SELL") && (Previous_RSI_Indicator=="SELL"))RSI_Indicator="卖出"。

//----------------------------------------

//弄清楚你是处于买入还是卖出的情况下

//----------------------------------------

if((MA_Indicator=="BUY") && (Stoch_Indicator=="BUY") && (RSI_Indicator=="BUY") return("BUY");

if((MA_Indicator=="SELL") && (Stoch_Indicator=="SELL") && (RSI_Indicator=="SELL") return("SELL");

}

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

//| 计算未结头寸 |

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

string Current_Trade(string symbol)

{

//----

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

{

如果(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)

{

返回("NONE")。

break;

}

如果(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)

{

如果(OrderType()==OP_BUY) 返回("BUY")。

如果(OrderType()==OP_SELL) 返回("SELL")。

}

}

}

//----------------------------------------------------------------------

// 如果信号改变了方向,首先要做的是关闭

// 当前已开的交易,然后再开另一个。

//-----------------------------------------------------------------------

void CloseTrade(string symbol)

{

//双马。

//----,只在新条形图的第一个时间段进行交易。

// if(Volume[0]>1) return;

//----

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

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; // 没有未完成的交易

如果(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) 继续。

//---- 检查订单类型

//暂时保留这两个选项,以防我想用不同的方式来做。

//比如有不同的颜色,或者其他什么。 否则这两个命令是一样的

// 你只需要一个。 除了不同的价格,我想... Doh!

如果(OrderType()==OP_BUY)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,White)。

休息。

}

如果(OrderType()==OP_SELL)

{

OrderClose(OrderTicket(), OrderLots(),Ask,3,White)。

break;

}

}

//----

}

//-----------------------------------------------------------

// 如果茶叶是这么说的,就开个仓吧

//------------------------------------------------------------

空白OpenTrade(string symbol,string Type)

{

int res;

//---- 买入条件

if(Type=="BUY") OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "ROB EA TEST",MAGICMA,0,Blue);

//---- 卖出条件

if(Type=="SELL") OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0, "ROB EA TEST",MAGICMA,0,Red);

}

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

//|专家启动功能|

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

空白启动()

{

//----

//---- 按当前符号计算未结订单

if(Current_Trade(Symbol())=="NONE") OpenTrade(Symbol(),Current_Indication() )。

// 但是如果有一个未平仓的交易,我们需要在打开新的交易之前先关闭它。

如果((Current_Trade(Symbol())=="BUY") && (Current_Indication()=="SELL"))。

{

CloseTrade(Symbol())。

OpenTrade(Symbol(),Current_Indication())。

}

如果((Current_Trade(Symbol())=="SELL") && (Current_Indication()=="BUY"))。

{

CloseTrade(Symbol())。

OpenTrade(Symbol(),Current_Indication())。

}

返回。

}

 

你去那里.........................................

附加的文件:
robtestea.mq4  7 kb
 

好的,真快! 非常感谢。 问题出在哪里?

罗伯。

 

写入文件的问题

我正在编写EA,它使用文件来保存交易结果(损失,胜利)和指标值。因此,当EA进入交易时,我将指标值和交易时间写入文件 "sellOpenInd.tab"。

在此操作后,文件包括。

CCISDivPresent 22 69 0.000024 0.000046 0.000045 -0.000015 2002.05.07 13:00

CCISDivPresent 66 85 0.000064 0.000032 0.000037 -0.000033 2002.05.15 07:00

CCISDivPresent 77 90 0.000041 -0.000029 0.000008 -0.000020 2002.06.03 08:00

etc...

In next stage i open this file and look into history for dates of opened orders then i check results of this trades and write into file "sellResults.tab"+indicators values writen in previous stage(above) .And here problem occures, only one same trade is recorded:

Rule7 Rule6 Rule5 Rule4 Rule3 Rule2 Rule1 TradeOutcome

-0.000015 0.000045 0.000046 0.000024 69 22 CCISDivPresent win

-0.000015 0.000045 0.000046 0.000024 69 22 CCISDivPresent win

-0.000015 0.000045 0.000046 0.000024 69 22 CCISDivPresent win

etc..

Here is my code(i know is not looking nice ):

int dates=FileOpen("sellOpenInd.tab", FILE_CSV|FILE_READ,"\t");

if(dates>0){

for(k=0;k<=10;k++){ //i use for loop instead of while(!FileIsEnding(dates) ) because ea enters in infinite loop for unknown reasons

dates=FileOpen("sellOpenInd.tab", FILE_CSV|FILE_READ,"\t");

FileSeek(dates,filepos,SEEK_SET);

while (FileIsLineEnding(dates)==FALSE){filestr=FileReadString(dates)+"\t"+filestr;filepos=filepos+FileTell(dates);}

decodeFile(filestr);//calling function which decodes readed string line, then writing results to global varaiables filter7 ,filter6 etc.

Comment(filterS7);

for (i =OrdersHistoryTotal()-1; i>=0; i--) {

OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);

if (OrderSymbol() == Currencies) {

if((OrderMagicNumber()==16381||OrderMagicNumber()==16383)&&OrderCloseTime()!=0){

historyDateTime=TimeToStr(OrderOpenTime());

OrderP=OrderProfit();

if(OrderP>0)orderresult="win";

if(OrderP<=0)orderresult="loss";

if(filterS7==historyDateTime) {

testFline=filterS6+"\t"+filterS5+"\t"+filterS4+"\t"+filterS3+"\t"+filterS2+"\t"+filterS1+"\t"+filterS0+"\t"+orderresult;

results=FileOpen("sellResults.tab", FILE_READ|FILE_WRITE,"\t");

FileSeek(results,0,SEEK_END);

FileWrite(results,testFline);

testFline="";

filestr="";

}

}

}

}

if(!FileIsEnding(dates)){FileClose(dates);FileClose(results);filepos=0;break;

}

}

}

 

在你的程序中,每一步你都反复打开"sellOpenInd.tab "文件

试试这个。

int dates=FileOpen("sellOpenInd.tab", FILE_CSV|FILE_READ,"\t");

if(dates>0){

for(k=0;k<=10;k++){ //i use for loop instead of while(!FileIsEnding(dates) ) because ea enters in infinite loop for unknown reasons

FileSeek(dates,filepos,SEEK_SET);

while (FileIsLineEnding(dates)==FALSE){filestr=FileReadString(dates)+"\t"+filestr;filepos=filepos+FileTell(dates);}

decodeFile(filestr);//calling function which decodes readed string line, then writing results to global varaiables filter7 ,filter6 etc.

Comment(filterS7);

for (i =OrdersHistoryTotal()-1; i>=0; i--) {

OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);

if (OrderSymbol() == Currencies) {

if((OrderMagicNumber()==16381||OrderMagicNumber()==16383)&&OrderCloseTime()!=0){

historyDateTime=TimeToStr(OrderOpenTime());

OrderP=OrderProfit();

if(OrderP>0)orderresult="win";

if(OrderP<=0)orderresult="loss";

if(filterS7==historyDateTime) {

testFline=filterS6+"\t"+filterS5+"\t"+filterS4+"\t"+filterS3+"\t"+filterS2+"\t"+filterS1+"\t"+filterS0+"\t"+orderresult;

results=FileOpen("sellResults.tab", FILE_READ|FILE_WRITE,"\t");

FileSeek(results,0,SEEK_END);

FileWrite(results,testFline);

testFline="";

filestr="";

}

}

}

}

if(!FileIsEnding(dates)){FileClose(dates);FileClose(results);filepos=0;break;

}

}

}
 

嗨,Roger09,我以前也试过这样做,但没有什么用。

总之,谢谢你的回答。