[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 186

 
Vinin:


se (c % 2==0) //até


Eu não verificaria o dobro para igualdade com nada.
 
Você pode, por favor, me dizer como executar um loop em ordens já fechadas e com prejuízo? Ou talvez alguém já tenha uma função: quando um comércio de perdas é fechado, multiplique o lote?
 
tara:

Eu não verificaria em dobro a igualdade com nada.


Pensei ter escrito antes disso apenas para os inteiros. Ou você não o lê bem?

Vinin 18.09.2011 03:14 am | apagar
NickXXX:

Pergunta para um enigma).

Como determinar programmaticamente se um número é par ou ímpar?

Por exemplo:

int a, b, c;

a=2;

b=3;

c=a+b

c é par ou ímpar?



Se os números forem números inteiros, verifique o restante da divisão por 2.

if (c % 2==0) //четное

 

esclarecer erros de código


avatar
2
Qwuyt 18.09.2011 11:56

Boa tarde!

Por favor, quem não é preguiçoso para olhar o código e aconselhar quais são os meus erros. Recebi um monte de erros na compilação. Esta é a minha primeira EA, acabo de começar a entendê-la. A idéia do Expert Advisor é a seguinte: na segunda-feira, a uma determinada hora, fazemos pedidos pendentes em ambas as direções a uma distância de X pontos do fechamento da semana anterior. Na sexta-feira, em um determinado momento, fecharemos as ordens de mercado e apagaremos as pendentes. Isso é tudo.

//+------------------------------------------------------------------+
//|                                                         Week.mq4 |
//|                                          Copyright © 2011, Qwuyt |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, Qwuyt"
#property link      ""

//--- input parameters
extern double    lot=0.01;                                                 //размер лота 
extern int       tp=200;                                                   //тейк профит
extern int       sl=50;                                                    //стоплосс
extern int       move=100;                                                 //движение цены 
extern int       hc=22;                                                    //час закрытия 
extern int       ho=4;                                                     //час закрытия
double BP;                                                                 //цена открытия бай
double SP;                                                                 //цена открытия селл
int Ticket;                                                                
int Tip;                                                                   //тип ордера
int Curday;                                                                //день недели
bool Ans = false;                                                          //ответ сервера после закрытия ордера
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()                               
  {
  int Curday = DayOfWeek                                    
  double BP = iClose(NULL,10080,1)+NormalizeDouble(move*Point,Digits);     //      
  double SP = iClose(NULL,10080,1)-NormalizeDouble(move*Point,Digits);
    if (ho >= Hour && Curday=1)                                            //4 утра понедельника - открытие бай
    {
    OrderSend (Symbol(),OP_BUYSTOP,lot,BP,3,sl,tp,NULL,0,0,Red)
    }
    if (ho >= Hour && Curday=1)                                            //4 утра понедельника - открытие селл
    {
    OrderSend (Symbol(),OP_SELLSTOP,lot,SP,3,sl,tp,NULL,0,0,Red)
    }
    while(true)                                                           //цикл закрытия орд.
     {
      if (Tip==0 && hc >= Hour && Curday=6)                               // Открыт ордер Buy, 22 часа пятницы закрыть
        {                                                                 //
         RefreshRates();                                                  // Обновление данных
         Ans=OrderClose(Ticket,lot,Bid,3);                                // Закрытие Buy
         return;                                                          // Выход из start()
        }
      if (Tip==1 && hc >= Hour && Curday=6)                               // Открыт ордер Sell, 22 часа пятницы закрыть
        {                                                                 //

         RefreshRates();                                                   // Обновление данных
         Ans=OrderClose(Ticket,lot,Bid,3);
         return;                                                          // Выход из start()
        }
      if (Tip==4||Tip==5 && hc >= Hour && Curday=6)                               // Открыт ордер Buy, 22 часа пятницы закрыть
        {                                                                 //
         RefreshRates();                                                  // Обновление данных
         Ans=OrderDelete(Ticket,CLR_NONE);                                // Закрытие Buy
         return;                                                          // Выход из start()
        }
      break;                                                               // Выход из while
     }
     Tip = OrderType();
return();
  }
Arquivos anexos:
Semana_1.mq4 (4.52 KB)



929
abolk 18.09.2011 12:00 am correto | apagar

para começar:

1) colocar ; no final de cada operador

2) utilizar funções corretas, por exemplo Hora()

 
Falmera:
Você pode, por favor, me dizer como executar um loop em ordens já fechadas e com prejuízo? Ou talvez alguém já tenha uma função: quando um comércio de perdas é fechado, multiplique o lote?

alguma dica?
 
Falmera:

sugira uma dica!


Mostre-me suas próprias tentativas de implementar esta função - o fio "newbie help".

ou busca pela "busca da última ordem fechada" ou similar - o tópico já existe há muito tempo

 
Falmera:

Bem, dê-me uma dica.

Veja as corujas da filial da Avalanche.
 

Estou aprendendo uma linguagem de programação, e estou tendo dificuldades para entender o comportamento do programa. Escrevi um EA com base no livro didático, mas o torci para um princípio de funcionamento ligeiramente diferente.

O Expert Advisor se baseia na média de 2 muwings. A idéia é simples, as médias móveis cruzam-se, a ordem é fechada e a oposta é aberta. Eu escrevi um EA e funciona bem. É claro que está em pequena desvantagem, mas de acordo com a idéia. Todo o problema é o seguinte (em negrito):

A=iMA(NULL,0,Period_MA_1,0,MODE_SMA,PRICE_CLOSE,1); // A

B=iMA(NULL,0,Period_MA_2,0,MODE_SMA,PRICE_CLOSE,1); // B

C=iMA(NULL,0,Period_MA_1,0,MODE_SMA,PRICE_CLOSE,2); // C

D=iMA(NULL,0,Period_MA_2,0,MODE_SMA,PRICE_CLOSE,2); // D

Se eu mudar a forma de calcular as médias móveis (pode mostrar mais sinal) e colocar o método exponencial( MODE_SMA) em vez de um simples(MODE_EEMA ) e mais um(MODE_SMMA), o chamado método suavizado, tudo dá errado. O princípio de trabalho se torna ainda mais divertido (no testador de estratégia) à medida que a EA abre uma ordem logo no início do período estabelecido e a fecha no final. Isto é, durante um ano abre um único comércio no início do período, e o fecha no final. Como resultado, o Expert Advisor me mostrou uma vantagem, mas eu não preciso de tal vantagem. Eu mesmo posso atirar uma moeda ao ar e abrir um pedido de compra ou venda e olhar, quer eu esteja ganhando ou perdendo em um ano. A propósito, se eu definir MODE_SMA como MODE_LWMA (Linear Weighted Moving Average), o programa funciona bem.

Por favor, me avise, o que está errado? O princípio é o mesmo, mas a forma de cálculo das médias móveis acaba de ser um pouco alterada.

O código completo está em arquivo anexo.


Tive respostas aqui, mas elas não são competentes e não se baseiam nos méritos. Alegadamente utilizo 4 médias móveis. Isto não é verdade, existem duas médias móveis, mas para cada média móvel tomada valores para duas barras (um total de 4 chamadas de matriz, A, B, C, D):1 e 2 . Além disso, eles escreveram que quando uma ordem é fechada, devemos baixar o número de ordens Total, mas não há necessidade disso porque as ordens são contadas usando a função Odertotal e se eu fechar uma ordem, o próprio total da ordem muda seu valor na próxima iteração. Eles também sugerem o uso dos chamados números mágicos para acompanhar os pedidos, mas eu ainda não cheguei a essa parte do manual. Devo repetir que o programa funciona quando MODE_SMA e MODE_LWMA são usados, mas não quando MODE_EMA e MODE_SMMA são usados. Quem sabe por quê, escreva-me uma resposta, por favor.

Arquivos anexados:
 
Falmera:

Por favor, me dê uma dica.
ir para o tema da avalanche, há lá conselheiros suficientes com qualquer incremento de lote... Procure no fórum no canto superior direito ou no google.
 
neisseria:

Estou aprendendo uma linguagem de programação, e estou tendo dificuldades para entender o comportamento do programa. Escrevi um EA com base no livro didático, mas o torci para um princípio de funcionamento ligeiramente diferente.

O Expert Advisor se baseia na média de 2 muwings. A idéia é simples, as médias móveis cruzam-se, a ordem é fechada e a oposta é aberta. Eu escrevi um EA e funciona bem. É claro que está em pequena desvantagem, mas de acordo com a idéia. Todo o problema é o seguinte (em negrito):

A=iMA(NULL,0,Period_MA_1,0,MODE_SMA,PRICE_CLOSE,1); // A

B=iMA(NULL,0,Period_MA_2,0,MODE_SMA,PRICE_CLOSE,1); // B

C=iMA(NULL,0,Period_MA_1,0,MODE_SMA,PRICE_CLOSE,2); // C

D=iMA(NULL,0,Period_MA_2,0,MODE_SMA,PRICE_CLOSE,2); // D

Se eu mudar a forma de calcular as médias móveis (pode mostrar mais sinal) e colocar o método exponencial( MODE_SMA) em vez de um simples(MODE_EEMA ) e mais um(MODE_SMMA), o chamado método suavizado, tudo dá errado. O princípio de trabalho se torna ainda mais divertido (no testador de estratégia) à medida que a EA abre uma ordem logo no início do período estabelecido e a fecha no final. Isto é, durante um ano abre um único comércio no início do período, e o fecha no final. Como resultado, o Expert Advisor me mostrou uma vantagem, mas eu não preciso de tal vantagem. Eu mesmo posso atirar uma moeda ao ar e abrir um pedido de compra ou venda e olhar, quer eu esteja ganhando ou perdendo em um ano. A propósito, se eu definir MODE_SMA como MODE_LWMA (Linear Weighted Moving Average), o programa funciona bem.

Por favor, me avise, o que está errado? O princípio é o mesmo, mas a forma de cálculo das médias móveis acaba de ser um pouco alterada.

O código completo está em arquivo anexo.


Tive respostas aqui, mas elas não são competentes e não se baseiam nos méritos. Alegadamente utilizo 4 médias móveis. Isto não é verdade, existem duas médias móveis, mas para cada média móvel tomada valores para duas barras (um total de 4 chamadas de matriz, A, B, C, D):1 e 2 . Além disso, eles escreveram que quando uma ordem é fechada, devemos baixar o número de ordens Total, mas isso não é necessário porque as ordens são contadas usando a função Odertotal e se eu fechar uma ordem, o próprio total da ordem muda seu valor na próxima iteração. Eles também sugerem o uso dos chamados números mágicos para acompanhar os pedidos, mas eu ainda não cheguei a essa parte do manual. Devo repetir que o programa funciona quando MODE_SMA e MODE_LWMA são usados, mas não quando MODE_EMA e MODE_SMMA são usados. Quem sabe por quê, escreva-me uma resposta, por favor.


Eu também verificaria duas vezes as condições. Pode haver um problema lá