[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 232

 

Dmido писал(а) >>

日安)


我是带着问题来找你的。 由于我对EA中的挂单缺乏了解,我回避了很久,但最后我还是被卡住了。我不明白如何在挂单中设置价格。我应该添加什么来代替BID和ASK?我可以使用在这之前计算的任何变量吗?那么,我应该如何设置这个价格,以便以后在下订单时能通过?我得到了很多错误,说没有这样的价格,等等.....。


如果你不介意,你可以用代码解释你的答案...我搜索了这么多,但它说得很偏......((())。

在价值观的质量上,Ask和Bid的想法应该是Ask和Bid的当前值,或者是之前计算的变量。

这里有一个特殊性:你可以把这些值作为真实的值,只用于买入和卖出订单。


最好的办法是使所有的订单以至少6个程序的形式打开,即OrderSendBuy, OrderSendSell, OrderSendLimitBuy, OrderSendLimitSell, OrderSendStopBuy 和 OrderSendStopSell。


PS

应该注意的是,限价单是在最佳价格(与当前价格缩进一定的点数)开立的,而止损单是在当前价格之上或之下的相反方向开立的。


来自市场的开盘代码的例子。

//Procedure OrderSendBuy
void OrderSendBuy(string WorkSymbol, double LotsSize=0, int Slippage=3,int SizeSL=0, int SizeTP=100,
string Text=NULL, int MN=0, datetime Expiration=0, color OrdrtColor=CLR_NONE)
{
//----------------------------------------------------------------------------//
// Служебные переменные
double RealAsk, RealBid; //Текущие Ask и Bid инструмента
double SymbolPoint; //Размер пункта текущего инструмента
double SL, TP; // StopLoss и TakeProfit будущей позиции

int TicketNew; //Тикер новой позиции (в случае удачи, иначе -1)
//----------------------------------------------------------------------------//
//Зашита от дурака
  if( LotsSize<MarketInfo( WorkSymbol,MODE_MINLOT)){ LotsSize = MarketInfo( WorkSymbol,MODE_MINLOT);}

//Расчет параметров для новой позиции
SymbolPoint = MarketInfo( WorkSymbol,MODE_POINT); //Определяем размер пункта
RealAsk = MarketInfo( WorkSymbol,MODE_ASK); //Определяем Ask
RealBid = MarketInfo( WorkSymbol,MODE_BID); //Определяем Bid

if( SizeTP>0){ TP = RealAsk+ SizeTP* SymbolPoint;}else{ TP = RealAsk+100* SymbolPoint;}
if( SizeSL>0){ SL = RealBid- SizeSL* SymbolPoint;}else{ SL = 0;}
//Попытка открыть позицию с рынка
TicketNew = OrderSend( WorkSymbol,OP_BUY, LotsSize, RealAsk, Slippage, SL, TP, Text, MN, Expiration, OrdrtColor);
//Проверка ошибок возникших при открытии новой позиции
if( TicketNew==-1)
//При открытии произошла ошибка
{
Print("Попытка открыть Market-Buy позицию по паре ", WorkSymbol," окончилась неудачно. Код ошибки #",GetLastError())
;}
else
//Позиция успешно установлена
{
Print("Успешно создана позиция Market-Buy по паре ", WorkSymbol," Тикер новой позиции #", TicketNow);
Alert("Open market-Buy, ticket ", TicketNew," Open price ", RealAsk," Profit ", TP," SL ", SL);
}
//----------------------------------------------------------------------------//
}


 

设置挂单 的代码示例。

//Procedure OrderSendLimitBuy
void OrderSendLimitBuy(string WorkSymbol, double LotsSize=0, int Slippage=3,int LimitStep=50,int SizeSL=0, int SizeTP=100,
string Text=NULL, int MN=0, datetime Expiration=0, color OrdrtColor=CLR_NONE)
{
//----------------------------------------------------------------------------//
// Служебные переменные
double RealAsk, RealBid; //Текущие Ask и Bid инструмента
double OpenPrice; //Цена на которую будет установлен отложник

double SymbolPoint; //Размер пункта текущего инструмента
double SL, TP; // StopLoss и TakeProfit будущей позиции

int TicketNew; //Тикер новой позиции (в случае удачи, иначе -1)
//----------------------------------------------------------------------------//
//Зашита от дурака
  if( LotsSize<MarketInfo( WorkSymbol,MODE_MINLOT)){ LotsSize = MarketInfo( WorkSymbol,MODE_MINLOT);}

//Расчет параметров для новой позиции
SymbolPoint = MarketInfo( WorkSymbol,MODE_POINT); //Определяем размер пункта
RealAsk = MarketInfo( WorkSymbol,MODE_ASK); //Определяем Ask
RealBid = MarketInfo( WorkSymbol,MODE_BID); //Определяем Bid

OpenPrice = RealAsk- LimitStep* SymbolPoint; //Цена на которую будет установлен отложник

if( SizeTP>0){ TP = OpenPrice+ SizeTP* SymbolPoint;}else{ TP = OpenPrice+100* SymbolPoint;}
if( SizeSL>0){ SL = RealBid-( SizeSL+ LimitStep)* SymbolPoint;}else{ SL = 0;}
//Попытка открыть позицию с рынка
TicketNew = OrderSend( WorkSymbol,OP_BUYLIMIT, LotsSize, OpenPrice, Slippage, SL, TP, Text, MN, Expiration, OrdrtColor);
//Проверка ошибок возникших при открытии новой позиции
if( TicketNew==-1)
//При открытии произошла ошибка
{
Print("Попытка создать Limit-Buy по паре ", WorkSymbol," окончилась неудачно. Код ошибки #",GetLastError())
;}
else
//Позиция успешно установлена
{
Print("Успешно создан ордер Limit-Buy по паре ", WorkSymbol," Тикер ордера #", TicketNow);
Alert("Create Limit-Buy, ticket ", TicketNew," Open price ", OpenPrice," Profit ", TP," SL ", SL);
}
//----------------------------------------------------------------------------//
}
 

你好。

我正在测试一个EA。

期间 日(D1) 2008.09.01 00:00 - 2009.08.31 00:00 (2008.09.01 - 2009.09.01)
模型 所有刻度线(基于所有最小的可用时间框架的最准确方法)
历史上的酒吧 1259 模拟的蜱虫 8769661 建模质量 不适用
图表不匹配错误 225

我得到了不匹配的错误。有什么办法可以避免它们吗?我不明白这是大还是小的错误。鳞片主要是绿色和深绿色,但只有约20%是满的。而且模拟质量不详--这是个问题吗?

也许我甚至不应该关注,我只是不明白......

提前感谢。

 
RedFish >> :

你好。

我正在测试一个EA。

期间 日(D1) 2008.09.01 00:00 - 2009.08.31 00:00 (2008.09.01 - 2009.09.01)
模型 所有刻度线(基于所有最小的可用时间框架的最精确方法)
历史上的酒吧 1259 模拟的蜱虫 8769661 建模质量 不适用
图表不匹配错误 225

我得到了不匹配的错误。有什么办法可以避免它们吗?我不明白这是大还是小的错误。鳞片主要是绿色和深绿色,但只有约20%是满的。而且模拟质量不详--这是个问题吗?

也许我甚至不应该关注,我只是不明白......

提前感谢。

我不知道,我个人从不理会这种事情(因为我几乎总是在没有可视化的情况下测试策略)。


这是我在类似测试期的Jew D1上得到的结果

尝试#1:历史上的条形图--1302点模拟--4313293模拟质量--50.00%。

尝试#2:历史上的条数 - 1303 模拟的点数 - 4323442 模拟的质量 - 50.00%
图表不匹配错误 - 0。

 
Interesting писал(а)>>

我不知道,我个人从不理会这种事情(因为我几乎总是在没有可视化的情况下测试策略)。

这是我在类似测试期的Jew D1上得到的结果

尝试#1:历史上的条形图--1302 点模拟--4313293 模拟质量--50.00%

尝试#2:历史:1303 条 -1303 点模拟 -4323442 建模质量 -50.00%
图表不匹配的误差 -0

谢谢你。

我认为现在MT会自动填充最后的512条,并填充其余的....。我不知道到底该怎么说。我的专家顾问是一个趋势顾问,距离对我来说很重要,512条不算多。

至于其他符号,可以从一个单独的网站下载,以后再下载?

我感谢你。

 

下午好,亲爱的朋友们。

我最近一直很笨,也许是天气的原因。

请告诉我,如果数组的元素 数是由外部变量设定的,如何声明一个一维数组(在一个指标中)。

谢谢你。

 
RedFish >> :

你好。

我正在测试一个EA。

期间日(D1) 2008.09.01 00:00 - 2009.08.31 00:00 (2008.09.01 - 2009.09.01)
模型所有刻度线(基于所有最小的可用时间框架的最准确方法)
历史上的酒吧1259模拟的蜱虫8769661建模质量不适用
图表不匹配错误225

我得到了不匹配的错误。有什么办法可以避免它们吗?我不明白这是大还是小的错误。鳞片主要是绿色和深绿色,但只有约20%是满的。而且模拟质量不详--这是个问题吗?

也许我甚至不应该关注,我只是不明白......

提前感谢。

我的下文是IMHO,但被引用了--如果我错了,请纠正我。

问题是,M15的第59分钟收盘、第45分钟收盘、M30的第30分钟收盘和H1的收盘可能不一致。

为了吻合,你需要杀死自己的历史,通过从报价服务器下载较小时期的历史记录

并使用下载的历史记录重新计算所有的时间框架。

在这种情况下,不同时间段的真实收盘价也可能不一致。

换句话说,你应该用较小的时间框架,用你的HAND读取较大时间框架的数值。

 
alderru >> :

下午好,亲爱的朋友们。

我最近一直很笨,也许是天气的原因。

请告诉我,如果数组的元素数是由外部变量设定的,如何声明一个一维数组(在一个指标中)。

谢谢你。

int y[];

外来的int blah-blah = 100。

init() {

ArrayResize(y, blah-blah)。

}

 
jartmailru писал(а)>>

我的下文是IMHO,但作为引言,如果我错了,请纠正我。

事实是,M15的第59分钟,M30的第45分钟,M30的第30分钟和H1的第30分钟可能不匹配。

为了吻合,你需要杀死自己的历史,通过从报价的服务器上下载较小时期的历史记录

并使用下载的历史记录重新计算所有的时间框架。

在这种情况下,不同时间段的真实收盘价也可能不一致。

也就是说,从好的方面来说,你应该采取较小的时间框架,读取较大的时间框架的数值。

О!手!!!。

谢谢你的回答。但从第一部分来看,我明白,这些错误对我来说并不关键。非常感谢你解释了这些错误的机制。

 
先生们,代码中的问题可以帮助你们!"。
for ( shift = CountBars; shift>=0; shift--) 
{ 
         cci1 = iCCI(NULL, 0, kCCI, PRICE_TYPICAL, shift-1);
         cci2 = iCCI(NULL, 0, kCCI, PRICE_TYPICAL, shift);  

         if ( cci1>100) // (b4plusdi>b4minusdi && nowplusdi<nowminusdi)
         {
         val1[ shift]=Low[ shift]-5*Point;
         if ( flagval2==0) { Alert("не забудь отправить письмо о БАЙ"); flagval2=1; flagval1=0;}
         }
         if ( cci1<-100) //(b4plusdi<b4minusdi && nowplusdi>nowminusdi) 
         {
         val2[ shift]=High[ shift]+5*Point;
         if ( flagval1==0) { Alert("не забудь отправить письмо о СЕЛЛ"); flagval2=0; flagval1=1;}
         }
   }
   return(0);
}

在最顶端。

int flagval1=0;
int flagval2=0;

我特别纠结于这些旗帜,谁能重新看一下?

-----------------

而且EA的代码也有问题。

//---------------------------------------------------------------- 5.1 
   cci1 = iCCI(NULL, 0, kCCI, PRICE_TYPICAL, 1);

   if ( New_Bar==true && cci1>100 && flagval2==1)                // && MA_3_t==0   && wayDOWN==true
     {                                            
         Opn_B=true; New_Bar=false; Cls_S=true;                                  
         flagval1=1;
         flagval2=0;
     }
     
   if ( New_Bar==true && cci1<-100 && flagval1==1)                 // && MA_4_t==0  && wayUP==true
     {                                                   
         Opn_S=true; New_Bar=false; Cls_B=true;
         flagval2=1;
         flagval1=0;
     }
//--------------------------------------------------------------- 6 --

这不是交易!也许有人会对它有一个新的看法。

决定愚蠢的,只要100(-100)去交易!

我附上EA!

附加的文件:
stoch_cros.mq4  17 kb
原因: