[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 370

 

Di nuovo buon pomeriggio!

Ho avuto alcune risposte da due brave persone, ma purtroppo nessuna delle opzioni funziona.

Ripeto, sto scrivendo un EA e mi sono confuso su questo momento:

Apro sempre gli ordini con un certo schema e possono chiudersi il giorno dell'apertura o rimanere sul mercato per altri 3 giorni.

Non riesco a capire come registrarmi per poter trovare un ordine attivo da 3 giorni e chiuderlo senza chiudere un ordine aperto dopo.

Lo schema di apertura è lo stesso per tutti gli ordini. Assegno le magie a tutti loro nel modo seguente: Magia_s =Magia_s+1.

Abbiamo bisogno che il sistema trovi e chiuda automaticamente questo ordine perché dobbiamo testare il sistema con dati storici.

Per favore, se qualcuno sa come risolvere questo problema, scriva la risposta. Vi sarò molto grato :)

 
Boneshapper:

Capito. Grazie mille. È una buona opzione, ma non posso testare il sistema con dati storici. Quindi volevo prescriverlo automaticamente in qualche modo. Se avete altri suggerimenti, fatemi sapere.
Per i test sulla storia dovremmo determinare la condizione di chiusura. Profitto/perdita o durata della posizione, per esempio non più di 3 giorni. Questo può essere fatto modificando la scadenza temporale di un ordine/posizione usando OrderModify.
 
paladin80:
Per testarlo sulla storia dobbiamo determinare la condizione di chiusura della posizione. Profit/Loss o durata della posizione, per esempio non più di 3 giorni. Questo può essere fatto modificando la scadenza temporale dell'ordine/posizione usando OrderModify.

Sì, si scopre che avremo una condizione vicina - è la durata della posizione, va bene, non più di 3 giorni. Ho letto di OrderModify ma ancora non lo capisco. Cercherò di farlo la sera. Grazie mille ancora per la tua risposta, molto rapida:)
 

Scusate, non è nella lingua, ma ho davvero bisogno di sapere se qualcuno lo sa.

In Windows 7 alcuni file si rifiutano di aprirsi. Premo "Apri con...", seleziono un programma e questo NON appare nella lista di selezione dei programmi. Qualcuno sa come rimuovere questa restrizione? Non ce l'aveva su XP. I fottuti sette mi stanno uccidendo :(

Ho il sospetto che il registro abbia bisogno di essere pulito. In particolare, non posso fare doppio clic sul formato FB2. CoolReader eseguito e tutto va bene. si apre. doppio clic per eseguire il formato di file fb2 non vuole.

Esegue un registro di ricerca Utillitoy JV-16 (sempre usato) - beh, ha trovato così tante voci di registro che menzionano fb2, solo orrore - anche paura di uccidere. Cosa fare? Una ricerca su Google non ha prodotto nulla :(

 

Saluti!

Aiutami a rifare il codice. Il codice non è nuovo, ma qualcosa non funziona per me.

Ecco il codice:

  *///-----------------Закрытие по истории в безубыток--------------------
   //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  Iteration = 0; // зануляем инерации перед их учетом в цикле по истории
  Sum_Loss = 0;  // суммарный убыток по этим итерациям

datetime 
Time_at_History_Current = 0,
Time_at_History_Previos = 0;     
 
 if(OrdersHistoryTotal() != 0)
   {
    for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--)
      {
       OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
          if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            {
             if(OrderProfit() < 0) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера
                                   // для последующего его анализа при подсчете количества итераций
                {
                 double lastLoss = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
                } 
             
             //Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));
             //Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
             
             if(Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
               {
                Time_at_History_Previos = Time_at_History_Current ;
                Iteration++;
                //Print("Iteration at History в условии сравнения  = ",  Iteration);
               }   
             else // они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
               {
                if(OrderProfit() >= 0)
                  break;
               }
            }
         }
      }
   }

if (Sum_Loss < 0.0) { // Имеем убыток по закрытым позам
  if (((AccountEquity() + Sum_Loss + (Sum_Loss * 0.25)) >= AccountBalance()) && (((totalSell > 0) && (totalBuy < 1)) || ((totalSell < 1) && (totalBuy > 0)))) { // Достигли безубытка
    // Здесь какой-то код, который необходимо выполнить при достижении безубытка
        CloseAllBuy();
           CloseAllSell();
           Sum_Loss = 0.0;
           
  
  }
}
//-----------------------------------------------------------------

Ho fatto del mio meglio per aprire un ciclo quando si raggiunge un trade negativo e dopo aver raggiunto un trade positivo, se avessi un trade negativo, diminuirei il mio saldo negativo del profitto dell'ultimo ordine chiuso, che è superiore a zero. Cioè, se l'ordine ha chiuso in un meno, cominciamo a lavorare, se la seguente operazione in profitto è più di una perdita, chiudiamo, se sulla seguente operazione hanno chiuso in più, ma questo più non è maggiore di un meno, sugli ordini precedenti, questo più da un saldo negativo, e l'ordine seguente è confrontato con nuovi indicatori che già è meno, come abbiamo prima hanno chiuso in un meno. Stiamo chiudendo con la pesca a strascico, ecco perché abbiamo un saldo positivo.

 
drknn:

Scusate, non è in lingua, ma ne ho davvero bisogno, se qualcuno lo sa.

In Windows 7 alcuni file si rifiutano di aprirsi. Premo "Apri con...", seleziono un programma e questo NON appare nella lista di selezione dei programmi. Qualcuno sa come rimuovere questa restrizione? Non ce l'aveva su XP. I fottuti sette mi stanno uccidendo :(

Ho il sospetto che il registro abbia bisogno di essere pulito. In particolare, non posso fare doppio clic sul formato FB2. CoolReader eseguito e tutto va bene. si apre. doppio clic per eseguire il formato di file fb2 non vuole.

Esegue un registro di ricerca Utillitoy JV-16 (sempre usato) - beh, ha trovato così tante voci di registro che menzionano fb2, solo orrore - anche paura di uccidere. Cosa fare? Una ricerca su Google non ha prodotto nulla :(


Avvio - Tutti i programmi - Programmi predefiniti - Impostare le mappature
 
drknn:

Scusate, non è nella lingua, ma ho davvero bisogno di sapere se qualcuno lo sa.

In Windows 7 alcuni file si rifiutano di aprirsi. Premo "Apri con...", seleziono un programma e questo NON appare nella lista di selezione dei programmi. Qualcuno sa come rimuovere questa restrizione? Non ce l'aveva su XP. I fottuti sette mi stanno uccidendo :(

Ho il sospetto che il registro abbia bisogno di essere pulito. In particolare, non posso fare doppio clic sul formato FB2. CoolReader eseguito e tutto va bene. si apre. doppio clic per eseguire il formato di file fb2 non vuole.

Esegue un registro di ricerca Utillitoy JV-16 (sempre usato) - beh, ha trovato così tante voci di registro che menzionano fb2, solo orrore - anche paura di uccidere. Cosa fare? Una ricerca su Google non ha prodotto nulla :(

http://rhpc.ru/topic/200/
 

Ragazzi...aiuto a chi lo sa!!!!


L'essenza della strategia: entrata da stocastico (5,14,3) uscita anche da stocastico ma con un altro periodo (5,3,3). Non capisco come fare un'uscita dallo stocastico e non dal segnale inverso.
Ho un problema e non ho idea di come possa essere risolto, cercherò di spiegarlo.
Così nel codice, che ho postato, ci sono 2 funzioni
//+------------------------------------------------------------------+
//| preparare array di biglietti da chiudere |
//+------------------------------------------------------------------+
void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9])
{
int size=ArrayRange(arrayTickets,0);
//----
if (size==0) return;

int i,type,ticket,closeSize;
for (i=0;i<size;i++)
{
type=arrayTickets[i][1];
// se il tipo di ordine non è un ordine a mercato, allora salta
if (type>OP_SELL) continue;

if (Reverses) // inverti il tipo di ordine a mercato
{
if (type==OP_BUY) type=OP_SELL; else type=OP_BUY;
}

// qui decidiamo per ogni ordine aperto il suo destino
// lasciarlo nel mercato o aggiungerlo all'array alla chiusura
if (type==OP_BUY)
{
//
// codice che permette di lasciare il buy

// come esempio
if (signal==OP_BUY) continue;
}

if (type==OP_SELL)
{
//
//codice che permette di continuare a vendere

//come esempio
if (signal==OP_SELL) continue;
}


closeSize=ArrayRange(ticketsClose,0);
ArrayResize(ticketsClose,closeSize+1);
ArrayResize(ticketsClose,closeSize+1);
ticketsClose[closeSize][0] = arrayTickets[i][0]; // ticket #
ticketsClose[closeSize][1] = arrayTickets[i][1] // tipo di ordine

// qui specifichiamo quanti lotti chiudere
lots[closeSize] = arrayTickets[i][2]; // volume da chiudere
// è possibile chiudere parzialmente, allora la linea sopra deve essere riscritta
}
//----
return;
}

//+------------------------------------------------------------------+
//| Chiude gli ordini con i ticket specificati |
//+------------------------------------------------------------------+
void CloseMarketOrders(int ticketsArray[][2], double lotsArray[])
{
//----
int i,size=ArrayRange(ticketsArray,0);
if (size==0) return;

int ticket,type;
double lots;
bool res;

int total=OrdersTotal();

for (i=0;i<size;i++)
{
ticket = ticketsArray[i][0];
type = ticketsArray[i][1];
lots = lotsArray[i];
RefreshRates(); // solo nel caso in cui l'ambiente di mercato sia aggiornato

// blocco chiusura acquisto
if (type==OP_BUY)
{
res = OrderClose(ticket,lots,Bid,Slippage,Orange);
if (!res)
{
Print("Impossibile chiudere l'ordine di acquisto di #",biglietto,"! Error #",GetLastError());
// ulteriore gestione degli errori, scrivete voi stessi
}
}

// blocco chiusura vendite
if (type==OP_SELL)
{
res = OrderClose(ticket,lots,Ask,Slippage,Orange);
if (!res)
{
Print("Failed to close sell order #",ticket,"! Error #",GetLastError());
// ulteriore gestione degli errori, scrivi da solo
}
}

}
//----
return;
}

La funzione void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]) ha bisogno di passare una condizione per decidere se l'ordine deve essere chiuso o no...
Ho provato a mettere delle condizioni ma non funziona niente....
Qualcuno può guardare e vedere se c'è un errore in queste funzioni o se ho fatto casino....
File:
osc_test.mq4  37 kb
 
L'offerta può essere uguale a 0 in un flusso di tick (a volte) durante una sessione di trading
 
tara:

Avvio - Tutti i programmi - Programmi predefiniti - Impostare le mappature

Questa operazione porta ad una finestra di selezione del programma. Specifica un programma e non vi compare.