[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 475

 

你好。请帮助我修复EA代码。代码中的问题如下:如果价格>或=规定的水平,那么交易开始。价格可以随心所欲地>这些水平,分别,EA开出一堆交易。

我想把代码中的符号">"去掉,只留下"="。 我自己把符号">"去掉了,但在编译时却出现了很多错误。请帮助我

 
// < 0 - Dn
// > 0 - Up
int Signal()
{
double RSI = iRSI(NULL,15,RSIperiod,RSI_price,SignalBar);
double Stoch = iStochastic(NULL,15,Stoch_K,Stoch_D,Stoch_slowing,Stoch_method,Stoch_price,Stoch_mode,SignalBar);
double CCI = iCCI(NULL,15,CCI_period,CCI_price,SignalBar);

double MA2 = iMA(NULL,15,ma2_period,ma2_shift,ma2_method,ma2_price,SignalBar);
double IchiA = iIchimoku(NULL, 15, tenkan, kijun, senkou_span_b, 3, SignalBar);
double IchiB = iIchimoku(NULL, 15, tenkan, kijun, senkou_span_b, 4, SignalBar); 

    if(GO && SignalType_1 && RSI >= 65 && Stoch >= 80 && CCI >= 100) {GO=false; return(+1);}//запретить повторный вход (+1);
    if(GO && SignalType_2 && Bid >= MA2 && RSI >= 65 && Stoch >= 80 && CCI>=100) {GO=false; return(+1);}//запретить повторный вход return(+1);
    if(GO && SignalType_3 && Bid >= IchiA && RSI >= 65 && Stoch >= 80 && CCI>=100) {GO=false; return(+1);}//запретить повторный вход (+1);
    
   
    
    if(GO && SignalType_1 && RSI <= 35 && Stoch <= 20 && CCI <= -100) {GO=false; return(-1);}//запретить повторный вход (-1);
    if(GO && SignalType_2 && Ask <= MA2 && RSI <= 35 && Stoch <= 20 && CCI <= -100) {GO=false; return(-1);}//запретить повторный вход (-1);
    if(GO && SignalType_3 && Ask <= IchiB && RSI <= 35 && Stoch <= 20&& CCI <= -100) {GO=false; return(-1);}//запретить повторный вход (-1);
    
    if(OrdersTotal()==0)GO=true;
    
    return(0);
}


这是代码的一部分,如果你需要整个代码,我将把它贴出来。

提前感谢。
 

在条件检查前加一行

如果(OrdersTotal()> 0)返回(0)。

我又看了看,发现这个代码不是你的,你也不知道怎么修。你的代码中已经有了一切,寻找它下订单的地方,以及为什么它忽略了GO变量。

 
Roger:

在条件检查前加一行

如果(OrdersTotal()>0)返回(0)。

又看了看,我明白了--代码不是你的,你也不知道如何修复它。你的代码中已经有了一切,寻找它下订单的地方,以及为什么它忽略了GO变量。

这段代码不是我的,而是根据我的服务条款为我写的,我不知道如何修复它,这就是为什么我处理 它。谢谢你的答复
 

下午好。

请你告诉我(在私人信息中),周末的报价在哪里?

 

大家好!需要一些帮助。我不知道错误在哪里!

关键是这一点。我们在时间上设定参考点,比方说29/10/2012 00:00。创建一个数组,把从起点到此刻的数值放进去。然后检查我设定的那些价格偏差的条件。如果我们达到偏差==10。我们显示一条信息,并将该点从我们之前设定的点转移到提前2天。并重复这一程序。问题是下面的数组应该不断地补充,比方说从一个点29/10/2012 00:00开始,我们没有足够的值,每一个新形成的分钟条都应该放在其中,并进行检查,参考点不会被转移,直到条件吻合==10次。但由于某些原因,每次打勾 时,它又开始从起点开始计算数值!!!!。

帮助解决这个问题!谢谢大家的帮助!!。

//-----------------------------------------------------------------------------------------------------------------------------------
datetime Tochka_History = D'2012.10.10 17:30';           
double d[];                                            
double a;                                                 
int i;                                                   
int r=0;                                                 
int j=0;                                                  
int c=0;                                                    
datetime time;                                              
int bars;                                                   
string l;
//-----------------------------------------------------------------------------------------------------------------------------------
int start(){
if(j==0){
l=TimeToStr(Tochka_History,TIME_DATE|TIME_MINUTES);
Alert("Точка отсчета - ",l,"; Счетчик c - ",c);                                                                          
if(TimeCurrent()>=Tochka_History){                                                                                   
bars=iBarShift(NULL,PERIOD_M1,Tochka_History,false);                                                                 
time=iTime(NULL,PERIOD_M1,i);                                                                                                                                            
ArrayResize(d,bars);                                                                                                 
for(i=bars;i>0;i--) d[i]=(iHigh(NULL,PERIOD_M1,i)+iLow(NULL,PERIOD_M1,i))/2;                                        
for(i=bars;i>0;i--) Uslovie();}}}                                                                                     
//-----------------------------------------------------------------------------------------------------------------------------------
void Uslovie(){
if(r==0){a=d[i];r=1;}
if(a+10*Point<=d[i] && r==1){r=0; c=c+1; Alert("Счетчик c - ",c);}
if(c==10){Alert("Значение С достигло 10"); j=1; Smeshenie();}}
//-----------------------------------------------------------------------------------------------------------------------------------
void Smeshenie(){
Tochka_History=Tochka_History+2*24*60*60;
l=TimeToStr(Tochka_History,TIME_DATE|TIME_MINUTES);
Alert("Новая точка отсчета времени - ",l);
if(TimeDayOfWeek(Tochka_History)==6||TimeDayOfWeek(Tochka_History)==0){
Tochka_History=Tochka_History+1*24*60*60;
l=TimeToStr(Tochka_History,TIME_DATE|TIME_MINUTES);
Alert("Новая точка отсчета времени, если выпали выходные - ",l);} j=0;}
//-----------------------------------------------------------------------------------------------------------------------------------
 
merkulov.artem:

大家好!需要一些帮助。我不知道错误在哪里!

关键是这一点。我们在时间上设定参考点,比方说29/10/2012 00:00。创建一个数组,把从起点到此刻的数值放进去。然后检查我设定的那些价格偏差的条件。如果我们达到偏差==10。我们显示一条信息,并将该点从我们之前设定的点转移到提前2天。并重复这一程序。问题是下面的数组应该不断地补充,比方说从一个点29/10/2012 00:00开始,我们没有足够的值,每一个新形成的分钟条都应该放在其中,并进行检查,参考点不会被转移,直到条件吻合==10次。但由于某些原因,每次打勾时它都会从起点开始重新计算数值!!。

帮助我解决这个问题谢谢大家的帮助!

我第三次看到你的请求,却没有人反应,你为什么这样想?可能人们只是不明白要他们做什么。

如果我们达到偏差==10。我们显示一条信息,并将该点从我们之前设定的点移动了2天.....但由于某些原因,它在每一次打勾时都会从起点开始重新计算数值!!。

那是因为你的代码没有检查它从哪里开始。所以它每次都是从起点开始的。请检查你的打印机是否有10的偏差,是否真的将点转移了2天。如果移位10天,航点移位2天,那么在输入下一个刻度之前,有必要检查一下,是否真的有必要输入起始点,或者已经输入。

你有一个复杂的方法来了解真相。我相信如果你提出问题本身,它就会告诉你一个更简单的解决方法。

P.S.

在所有解决问题的方法中,最简单的方法总是最难找到的,因为为了找到它,你必须回收和筛选一堆垃圾。因此,请随意制定--简单的解决方案并不意味着快速解决。也许这里的人将拯救你的生命不止一天。

 

日安!!!。超级超级棒的问题。当测试器到达代码中的正确位置时,我如何停止它?我在帮助中没有看到这样的内容。这根本不可能,而这个功能将是有价值的!

2.iCustom函数的行为。在现实中,该函数总是产生一个打印-1(除了当缓冲区的角落里有一个之字形)。但在测试器中都看到了0。为什么有这样的差别?

double strela1 = iCustom(NULL, taymfreym, "индикатор", 2, 1);
            double strela2 = iCustom(NULL, taymfreym, "индикатор", 3, 1);
            
            int BUY=0,SELL=0;int ticket; 
            Print (  " strela1 " , strela1 , "   strela2  " , strela2 );


 
Dimka-novitsek:
日安!!!。超级超级棒的问题。当测试器到达代码中的正确位置时,我如何停止它?我在帮助中没有看到这样的内容。这根本不可能,而这个功能将是有价值的!

给他按下 "暂停/中断 "按钮

搜索一篇关于如何发送的文章。

 
谢谢你!我去找找看!
 
不能应付这种暂停-中断的模拟,它不起作用!
//+------------------------------------------------------------------+
//|                                                     советник.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#include <WinUser32.mqh>
  extern double  lot=1;                          
  extern int taymfreym=0 ;                           
  extern double  stoplos=20 ;                          
  extern double  takeprofit=50 ; 
  extern double  magicnumber=350 ;                          


void BreakPoint(){if (!IsVisualMode()) return(0);keybd_event(19,0,0,0);
Sleep(10);
keybd_event(19,0,2,0);}

//+------------------------------------------------------------------+
//| expert initialization function                                   |
----------------------------------+
int start()
  {
//----

            
            double strela1 = iCustom(NULL, taymfreym, "индикатор", 2, 1);
            double strela2 = iCustom(NULL, taymfreym, "индикатор", 3, 1);
            
            int BUY=0,SELL=0;int ticket; 
            Print (  " strela1 " , strela1 , "   strela2  " , strela2 );BreakPoint();
            
    
            
            for(int i=1; i<=OrdersTotal(); i++) {  
            if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!=Symbol( ) )continue;      // Не наш фин. инструм
         if (OrderMagicNumber( ) !=magicnumber)continue;
         if (OrderType()==0){ BUY++; ticket=OrderTicket( );}
         if (OrderType()==1) {SELL++;ticket=OrderTicket( );}    } }
         
   if (strela1>strela2&&BUY==0&&SELL==0){    
            
           OrderSend( NULL, OP_BUY, lot, Ask, 3, NormalizeDouble( Bid- (stoplos*Point),Digits),  
 NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE);  
            Print( "strela1>strela2&&BUY==0&&SELL==0   " , GetLastError());BreakPoint(); }
           
   if (strela1<strela2&&BUY==0&&SELL==0){  
   
            OrderSend( NULL, OP_SELL, lot, Bid, 3, NormalizeDouble( Ask- (stoplos*Point),Digits),  
 NormalizeDouble( Bid+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
            Print( "strela1<strela2&&BUY==0&&SELL==   " , GetLastError());BreakPoint(); }