[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 475

 

Olá. Por favor, ajude-me a consertar o código EA. O problema no código é o seguinte: se o preço > ou = níveis prescritos, então uma negociação é aberta. O preço pode ser o quanto quiser > estes níveis, respectivamente, a EA abre um monte de negócios.

Queroremover o símbolo">"do código e deixar apenas"=". Eu mesmo removo o símbolo ">" mas recebo muitos erros ao compilar.AJUDA-ME.

 
// < 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);
}


Isto faz parte do código, se você precisar do código inteiro, eu o afixarei.

Obrigado de antemão.
 

Coloque uma linha antes da verificação da condição

if(OrdersTotal()>0)return(0);

Eu olhei novamente e percebi que o código não é seu e você não tem idéia de como consertá-lo. Você já tem tudo em seu código, procure o local onde ele faz pedidos e porque ele ignora a variável GO.

 
Roger:

Coloque uma linha antes da verificação da condição

if(OrdersTotal()>0)return(0);

Olhado novamente, entendi - o código não é seu e você não tem idéia de como consertá-lo. Você já tem tudo em seu código, procure o local onde ele faz pedidos e porque ele ignora a variável GO.

O código não é meu, mas foi escrito para mim de acordo com minha tarefa técnica e não tenho idéia de como consertá-lo, por isso o dirigi. Obrigado pela resposta
 

Boa tarde.

Você pode me dizer por favor (em uma mensagem particular) onde as citações são feitas nos fins de semana?

 

Olá a todos! precisam de ajuda. Eu não sei onde está o erro!

A questão é esta. Definimos o ponto de referência no tempo, digamos 29/10/2012 00:00. Criar uma matriz e colocar os valores nela desde o ponto de partida até o momento presente. Em seguida, verifique aquelas condições de desvios de preço que eu estabeleci. Se chegarmos a um desvio ==10. Mostramos uma mensagem e mudamos o ponto do que definimos anteriormente para 2 dias à frente. E repita o procedimento. O problema é que o seguinte conjunto deve ser constantemente reabastecido, digamos que a partir de um ponto 29/10/2012 00:00 não temos valores suficientes e cada nova barra de minutos formada deve ser colocada nela e verificada e o ponto de referência não é deslocado até que as condições coincidam ==10 vezes. Mas, por alguma razão, a cada tick, ele começa a contar valores novamente a partir do ponto de partida!!!!

Ajude a resolver o problema! OBRIGADO A TODOS POR SUA AJUDA!!!

//-----------------------------------------------------------------------------------------------------------------------------------
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:

Olá a todos! precisam de ajuda. Eu não sei onde está o erro!

A questão é esta. Definimos o ponto de referência no tempo, digamos 29/10/2012 00:00. Criar uma matriz e colocar os valores nela desde o ponto de partida até o momento presente. Em seguida, verifique aquelas condições de desvios de preço que eu estabeleci. Se chegarmos a um desvio ==10. Mostramos uma mensagem e mudamos o ponto do que definimos anteriormente para 2 dias à frente. E repita o procedimento. O problema é que o seguinte conjunto deve ser constantemente reabastecido, digamos que a partir de um ponto 29/10/2012 00:00 não temos valores suficientes e cada nova barra de minutos formada deve ser colocada nela e verificada e o ponto de referência não é deslocado até que as condições coincidam ==10 vezes. Mas por alguma razão começa a contar novamente os valores desde o ponto de partida a cada tique!!!

Ajude-me a resolver este problema! OBRIGADO A TODOS POR SUA AJUDA!

Na terceira vez que eu vejo seu pedido e ninguém reage, por que você acha que sim? Provavelmente, as pessoas simplesmente não entendem o que se quer delas.

Se chegarmos a desvios ==10. Mostramos uma mensagem e movemos o ponto a partir daquele que estabelecemos antes em 2 dias.....Mas por alguma razão começa a recalcular valores a partir do ponto de partida a cada tique!!!

Isso porque seu código não verifica de onde ele começa. Portanto, ele começa cada vez a partir do ponto de partida. Verifique com sua impressora se há um desvio de 10 e se ela realmente desloca o ponto em 2 dias. Se for deslocado por 10 e o ponto de passagem for deslocado por 2 dias, então antes de entrar no próximo tick é necessário verificar, se é realmente necessário entrar no ponto de partida ou se já está entrado.

Você tem uma maneira complicada de chegar à verdade. Tenho certeza de que se você formular o problema em si, ele lhe dirá uma maneira mais simples de resolvê-lo.

P.S.

De todas as soluções para um problema, a mais fácil é sempre a mais difícil de encontrar, pois para encontrá-lo é preciso reciclar e peneirar um monte de lixo. Portanto, sinta-se à vontade para formular - solução simples não significa solução rápida. Talvez as pessoas aqui o salvem mais de um dia de sua vida.

 

Bom dia!!! Super duper pergunta fantástica. Como paro o testador quando ele chega ao lugar certo no código? Eu não vejo nada parecido na ajuda. Não pode ser isso em absoluto, e a função seria valiosa!

2. O comportamento da função iCustom. Na realidade, a função sempre produz uma impressão -1 (exceto quando há um canto de ziguezague). Mas no testador, todos vêem 0. Por que essa diferença?

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:
Bom dia!!! Super duper pergunta fantástica. Como paro o testador quando ele chega ao lugar certo no código? Eu não vejo nada parecido na ajuda. Não pode ser isso em absoluto, e a função seria valiosa!

enviar-lhe um aperto do botão "Pausa/Quebra

procurar por um artigo sobre como enviá-lo.

 
Obrigado! Vou procurá-lo!
 
Não consegue lidar com esta emulação Pause-Break, ela não está funcionando!
//+------------------------------------------------------------------+
//|                                                     советник.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(); }
Razão: