[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 186

 
Vinin:


se (c % 2==0) //pari


Non controllerei due volte l'uguaglianza con qualcosa.
 
Potete dirmi come eseguire un ciclo for su ordini già chiusi in perdita? O forse qualcuno ha già una funzione: quando si chiude un trade in perdita, moltiplicare il lotto?
 
tara:

Non controllerei due volte l'uguaglianza con niente.


Pensavo di aver scritto prima che solo per gli interi. O non leggi bene?

Vinin 18.09.2011 03:14 am | delete
NickXXX:

Domanda per un puzzle).

Come determinare programmaticamente se un numero è pari o dispari?

Per esempio:

int a, b, c;

a=2;

b=3;

c=a+b

c è pari o dispari?



Se i numeri sono interi, controlla il resto della divisione per 2.

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

 

chiarire gli errori del codice


avatar
2
Qwuyt 18.09.2011 11:56

Buon pomeriggio!

Per favore, chi non è pigro può guardare il codice e consigliare quali sono i miei errori. Ho un mucchio di errori durante la compilazione. Questo è il mio primo EA, ho appena iniziato a capirlo. L'idea dell'Expert Advisor è la seguente: il lunedì ad una data ora piazziamo ordini pendenti in entrambe le direzioni ad una distanza di X punti dalla chiusura della settimana precedente. Il venerdì, ad una certa ora, chiuderemo gli ordini a mercato e cancelleremo quelli pendenti. Questo è tutto.

//+------------------------------------------------------------------+
//|                                                         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();
  }
File allegati:
Settimana_1.mq4 (4,52 KB)



929
abolk 18.09.2011 12:00 am corretto | cancellare

per cominciare:

1) mettere ; alla fine di ogni operatore

2) usare funzioni corrette, per esempio Hour()

 
Falmera:
Potete dirmi come eseguire un ciclo for su ordini già chiusi in perdita? O forse qualcuno ha già una funzione: quando si chiude un trade in perdita, moltiplicare il lotto?

qualche consiglio?
 
Falmera:

quindi aiutatemi per favore


Mostrami i tuoi tentativi di implementare questa funzione - il thread "newbie help".

o cercare "cerca l'ultimo ordine chiuso" o simili - l'argomento è stato in giro per molto tempo

 
Falmera:

Beh, dammi un indizio.

Vedere i gufi del ramo Avalanche.
 

Sto imparando un linguaggio di programmazione e ho difficoltà a capire il comportamento del programma. Ho scritto un EA basato sul libro di testo, ma l'ho stravolto secondo un principio di funzionamento leggermente diverso.

L'Expert Advisor si basa su una media di 2 muwings. L'idea è semplice, le medie mobili si incrociano, l'ordine viene chiuso e si apre quello opposto. Ho scritto un EA e funziona bene. Naturalmente è in leggero svantaggio, ma in accordo con l'idea. L'intero problema è il seguente (in grassetto):

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 cambio il modo di calcolare le medie mobili (può mostrare il segno più) e metto il metodo esponenziale( MODE_SMA) invece di quello semplice(MODE_EEMA ) e un altro(MODE_SMMA), il cosiddetto metodo lisciato, tutto va male. Il principio di funzionamento diventa ancora più divertente (nel tester della strategia) poiché l'EA apre un ordine all'inizio del periodo impostato e lo chiude alla fine. Cioè, per un anno apre un solo trade all'inizio del periodo e lo chiude alla fine. Di conseguenza, l'Expert Advisor mi ha mostrato un plus, ma non ho bisogno di questo plus. Io stesso posso lanciare una moneta e aprire un ordine di acquisto o di vendita e guardare se sto vincendo o perdendo in un anno. A proposito, se imposto MODE_SMA a MODE_LWMA (Linear Weighted Moving Average), il programma funziona bene.

Per favore, consigliatemi, cosa c'è di sbagliato? Il principio è lo stesso, ma il modo di calcolo delle medie mobili è stato appena cambiato un po'.

L'intero codice è nel file allegato.


Ho avuto risposte qui, ma non sono competenti e non nel merito. Presumibilmente uso 4 medie mobili. Questo non è vero, ci sono due medie mobili, ma per ogni media mobile presa valori per due barre (un totale di 4 chiamate di array, A, B, C, D):1 e 2 . Inoltre, hanno scritto che quando un ordine viene chiuso, dovremmo abbassare il numero di ordini totali, ma non è necessario perché gli ordini vengono contati utilizzando la funzione Odertotal e se chiudo un ordine, il totale dell'ordine stesso cambia il suo valore alla prossima iterazione. Suggeriscono anche di usare i cosiddetti numeri magici per tenere traccia degli ordini, ma non sono ancora arrivato a quella parte del manuale. Devo ripetere che il programma funziona quando si usano MODE_SMA e MODE_LWMA ma non quando si usano MODE_EMA e MODE_SMMA. Chissà perché, scrivetemi una risposta per favore.

 
Falmera:

Per favore, datemi un suggerimento.
vai al topic della valanga, ci sono un sacco di consiglieri lì con qualsiasi incremento del lotto... Cerca nel forum in alto a destra o su Google.
 
neisseria:

Sto imparando un linguaggio di programmazione e ho difficoltà a capire il comportamento del programma. Ho scritto un EA basato sul libro di testo, ma l'ho stravolto secondo un principio di funzionamento leggermente diverso.

L'Expert Advisor si basa su una media di 2 muwings. L'idea è semplice, le medie mobili si incrociano, l'ordine viene chiuso e quello opposto viene aperto. Ho scritto un EA e funziona bene. Naturalmente è in leggero svantaggio, ma in accordo con l'idea. L'intero problema è il seguente (in grassetto):

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 cambio il modo di calcolare le medie mobili (può mostrare il segno più) e metto il metodo esponenziale( MODE_SMA) invece di quello semplice(MODE_EEMA ) e un altro(MODE_SMMA), il cosiddetto metodo lisciato, tutto va male. Il principio di funzionamento diventa ancora più divertente (nel tester della strategia) poiché l'EA apre un ordine all'inizio del periodo impostato e lo chiude alla fine. Cioè, per un anno apre un solo trade all'inizio del periodo e lo chiude alla fine. Di conseguenza, l'Expert Advisor mi ha mostrato un plus, ma non ho bisogno di tale plus. Io stesso posso lanciare una moneta e aprire un ordine di acquisto o di vendita e guardare se sto vincendo o perdendo in un anno. A proposito, se imposto MODE_SMA a MODE_LWMA (Linear Weighted Moving Average), il programma funziona bene.

Per favore, consigliatemi, cosa c'è di sbagliato? Il principio è lo stesso, ma il modo di calcolo delle medie mobili è stato appena cambiato un po'.

L'intero codice è nel file allegato.


Ho avuto risposte qui, ma non sono competenti e non nel merito. Presumibilmente uso 4 medie mobili. Questo non è vero, ci sono due medie mobili, ma per ogni media mobile presa valori per due barre (un totale di 4 chiamate di array, A, B, C, D):1 e 2 . Inoltre, hanno scritto che quando un ordine viene chiuso, dovremmo abbassare il numero di ordini totali, ma non c'è bisogno di questo perché gli ordini vengono contati usando la funzione Odertotal e se chiudo un ordine, il totale dell'ordine stesso cambia il suo valore alla prossima iterazione. Suggeriscono anche di usare i cosiddetti numeri magici per tenere traccia degli ordini, ma non sono ancora arrivato a quella parte del manuale. Devo ripetere che il programma funziona quando si usano MODE_SMA e MODE_LWMA ma non quando si usano MODE_EMA e MODE_SMMA. Chissà perché, scrivetemi una risposta per favore.


Controllerei anche le condizioni. Potrebbe esserci un problema