Qualcuno scribacchi una sceneggiatura per 5 wmz. - pagina 14

 
Profitabl:

Questo codice si compila con quattro errori, forse mancano delle parentesi?


Prova così:

Bene, le funzioni NumberOfPositions e ClosePositions devono essere presenti nel codice

extern double TakeProfit = 120;
extern double StopLoss = 120;
extern double Lots = 0.1;
int Magic = 1234567;
int ticket;

//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
if ( DayOfWeek()==4)//если сегодня четверг
   {
    if ( Hour() == 23) //если - 23 часа терминального времени
       {
        if ( NumberOfPositions(NULL,OP_BUY, Magic )==0 ) //если нет открытых бай-позиций
           { 
           //"если цена open 46 периода 30M четверга меньше цены open 46 периода 30M среды,"(с)
           //"а цена опен среды больше цены опен вторника" (с),
           //"да ещё цена опен вторника больше цены опен понедельника" (с),
           if ( Close[1]<= Open[24] && Close[23]>=Open[48] && Close[47]>=Open[72]) 
              {
               ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask+StopLoss*Point,3,0,Ask+TakeProfit*Point,"Name_Expert",16384,0,Green);
               if(ticket!=-1)
                  {Print("Error opening BUY order : ",GetLastError());
                   return(0);}
              }     

           }
           
        }
   }       

if ( DayOfWeek()==5 && Hour() == 23){//если сегодня пятница, 23-00
//закрываем
ClosePositions(NULL,OP_BUY, Magic); }

return(0);
}
// the end.

 

=================

Non ci sono stati 4 errori. C'erano 4 funzioni inutilizzate. Chiarito tutto.

Lo dirò di nuovo. Controllare per tf=n1

extern int       Magic=5671;

extern double    lots = 0.1;
extern int       StopLoss=120;
extern int       TakeProfit=120;

extern string _________________ = "=== Прочие Параметры советника  ===";
extern int        Slippage        = 10; // Проскальзывание цены
extern string Name_Expert = "Обезьяна Чи-Чи-Чи продавала кирпичи";
extern bool   UseSound      = True;   // Использовать звуковой сигнал
color  clOpenBuy     = Blue;        // Цвет значка открытия покупки
color  clOpenSell    = Red;         // Цвет значка открытия продажи
 color  clCloseBuy    = Green;     // Цвет закрытия покупки
 color  clCloseSell   = Green;    // Цвет закрытия продажи
extern int    NumberOfTry   = 10;           // Количество попыток
 string SoundSuccess  = "ok.wav";          // Звук успеха
 string SoundError    = "timeout.wav";    // Звук ошибки

//----------------------------------
double SL,TP;
int ticket;
static int prevtime = 0;
int StopLevel;

//-- Подключаемые модули --

#include <stderror.mqh>
#include <stdlib.mqh>

//+------------------------------------------------------------------+

int start()
  {
// задаем работу по ЦЕНАМ ОТКРЫТИЯ 
if (Time[0] == prevtime) return(0); //если появился новый бар
   prevtime = Time[0]; // начинаем работу

StopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL); // вызываем разрешенный 
//минимаьный стоп-Уровень
//======================= открываем позиции =====================================
if ( DayOfWeek()==4){//если сегодня четверг
if ( Hour() == 23)  {//если - 23 часа терминального времени
if ( NumberOfPositions(NULL ,OP_BUY, Magic )==0 ) { //если  нет открытых бай-позиций 
//если цена open 46 периода 30M четверга меньше цены open 46 периода 30M среды,
//а цена опен среды больше цены опен вторника,
//да ещё цена опен вторника больше цены опен понедельника,
if ( Close[1]<= Open[24] && Close[23]>=Open[48] && Close[47]>=Open[72]) {
//покупаем 
      SL=0;TP=0;
      if(StopLoss>0 && StopLoss>StopLevel )    SL=Bid-Point*StopLoss;
      if(TakeProfit>0 && TakeProfit>StopLevel) TP=Bid+Point*TakeProfit;
      if(StopLoss  <StopLevel && StopLoss>0)   SL = Bid-Point*StopLevel; 
      if(TakeProfit<StopLevel && TakeProfit>0) TP = Bid+Point*StopLevel; 
   ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,3,SL,TP,"Name_Expert",Magic,0,clOpenBuy );
   if(ticket < 0) {
            Print("Ошибка открытия ордера BUY #", GetLastError()); 
            Sleep(10000);  prevtime = Time[1];   return (0); 
                  } 
        }}}}
//================== конец блока открытия ==================================
 //================Закрытие позиций=====================================
if ( DayOfWeek()==5  && Hour() == 23){//если сегодня пятница, 23-00
//закрываем
 ClosePositions(NULL,OP_BUY, Magic); }            
                  
//================== Конец блока закрытия  =============================
  return(0);
  }
//ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ Конец функции int start() ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ 
 
 //ЖЖЖЖЖЖЖЖЖЖЖ ПОЛЬЗОВАТЕЛЬСКИК ФУНКЦИИ ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ

//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает наименование торговой операции                      |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    op - идентификатор торговой операции                                    |
//+----------------------------------------------------------------------------+
string GetNameOP(int op) {
  switch (op) {
    case OP_BUY      : return("Buy");
    case OP_SELL     : return("Sell");
    case OP_BUYLIMIT : return("BuyLimit");
    case OP_SELLLIMIT: return("SellLimit");
    case OP_BUYSTOP  : return("BuyStop");
    case OP_SELLSTOP : return("SellStop");
    default          : return("Unknown Operation");
  }
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия  : 19.02.2008                                                      |
//|  Описание: Закрытие одной предварительно выбранной позиции                 |
//+----------------------------------------------------------------------------+
void ClosePosBySelect() {
  bool   fc;
  color  clClose;
  double ll, pa, pb, pp;
  int    err, it;

  if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
    for (it=1; it<=NumberOfTry; it++) {
      if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
      while (!IsTradeAllowed()) Sleep(5000);
      RefreshRates();
      pa=MarketInfo(OrderSymbol(), MODE_ASK);
      pb=MarketInfo(OrderSymbol(), MODE_BID);
      if (OrderType()==OP_BUY) {
        pp=pb; clClose=clCloseBuy;
      } else {
        pp=pa; clClose=clCloseSell;
      }
      ll=OrderLots();
      fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose);
      if (fc) {
        if (UseSound) PlaySound(SoundSuccess); break;
      } else {
        err=GetLastError();
        if (UseSound) PlaySound(SoundError);
        if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
        Print("Error(",err,") Close ",GetNameOP(OrderType())," ",
              ErrorDescription(err),", try ",it);
        Print(OrderTicket(),"  Ask=",pa,"  Bid=",pb,"  pp=",pp);
        Print("sy=",OrderSymbol(),"  ll=",ll,"  sl=",OrderStopLoss(),
              "  tp=",OrderTakeProfit(),"  mn=",OrderMagicNumber());
        Sleep(1000*5);
      }
    }
  } else Print("Некорректная торговая операция. Close ",GetNameOP(OrderType()));
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru/                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Закрытие позиций по рыночной цене                              |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
void ClosePositions(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) ClosePosBySelect();
        } } } } }

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает количество позиций.                                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), kp=0;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) kp++;
          }}}}}  return(kp);}

 
leonid553:

=================

Non ci sono stati 4 errori. C'erano 4 funzioni inutilizzate. Chiarito tutto.

Lo dirò di nuovo. Controllare su tf=n1.


Lei ha effettivamente dato un esempio, si può inviare WMR dove si possono trasferire 160 rubli a, almeno a un'organizzazione di beneficenza.

L'unica cosa che non posso fare è chiudere le posizioni SELL il venerdì alle 23:00, altrimenti solo i BUY sono chiusi, mentre i SELL sono modificati per tre o quattro giorni e naturalmente i s\l sono chiusi.

Qui questi dati dell'euro e della sterlina possono essere presi in considerazione come condizioni aggiuntive?, solo quando le previsioni non sono asimmetriche B=BB o H=HH si dovrebbe comprare nella direzione opposta, migliora il risultato molto di più.

Ma se gli stessi dati per la sterlina e l'euro allo stesso tempo
EUR EUR è "in calo martedì, in calo mercoledì, in calo giovedì
GBP "in aumento, mercoledì in aumento, martedì in calo".
allora aprire non "VENDERE", ma "COMPRARE".

Parlando di redditività, se si rimuovono le previsioni imprecise, solo 70 trade di sei previsioni del venerdì danno circa 1500 pips. Questo può essere moltiplicato per cinque volte il resto dei giorni, e aumentando i lotti in proporzione al debito di altre due volte - non importa quanti siano, è in pareggio. Darò a Leonid una tabella di 160 previsioni EUR GBP CHF JPY gratis per la partecipazione al problema, invia WMR ale2715@yandex.ru e nella lettera di ritorno riceverà le previsioni, scrivi un EA, guadagnerai, ma non partecipare al campionato con esso, lo aggancerò anche al campionato.

 
lasso:

Provate in questo modo:

Bene, e le funzioni NumberOfPositions e ClosePositions dovrebbero essere presenti nel codice


Grazie, lo lasceremo così per ora
 
Profitabl:

L'unica cosa che non funziona è che le posizioni SELL sono chiuse anche il venerdì alle 23:00, altrimenti solo BUY sono chiuse, mentre SELL sono modificate per tre o quattro giorni e naturalmente s\l sono chiuse.

Infatti... )))

Dovrebbe essere così

 //================Закрытие позиций=====================================
if ( DayOfWeek()==5  && Hour() == 23){//если сегодня пятница, 23-00
//закрываем
 ClosePositions(NULL,-1, Magic); }            
                  
//================== Конец блока закрытия  =============================
  return(0);
  }
//ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ Конец функции int start() ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ 
 

L'apertura di una posizione Sell non faceva affatto parte del codice. Perché nel lavoro originale si trattava di aprire una posizione di acquisto sul franco.

//------------

Sì, devo cambiare un po' la chiusura - ClosePositions(NULL,-1, Magic)

 
leonid553:

Non ci sono stati quattro errori. C'erano quattro funzioni inutilizzate. Chiarito tutto.

Lo dirò di nuovo. Controllo su tf=n1

Uno sguardo più attento ha rivelato le seguenti sfumature:

1) Le condizioni si contraddicono a vicenda

//если цена open 46 периода 30M четверга меньше цены open 46 периода 30M среды,
//а цена опен среды больше цены опен вторника,
//да ещё цена опен вторника больше цены опен понедельника,
if ( Close[1]<= Open[24] && Close[23]>=Open[48] && Close[47]>=Open[72]) {
//покупаем 


2) chiamare la serie temporale (di tipo Open[48]) non è del tutto corretto quando si testa sulla storia poiché ci possono essere dei vuoti nella storia e quindi il prezzo è ottenuto non dalla barra di cui ha scritto lo starter


3) Condizione di chiusura.

 //================Закрытие позиций=====================================
if ( DayOfWeek()==5  && Hour() == 23){//если сегодня пятница, 23-00
//закрываем

Non è universale poiché per esempio la società di intermediazione ha Al...e non c'è nessuna barra il venerdì con il valore dell'ora uguale a 23


4) E alcune altre sfumature minori, ma la loro influenza sulla curva di equilibrio risultante non è affatto minore.... ))



Per favore, abbiate pazienza con me in modo corretto. Questo post non è una denuncia contro leonid553, assolutamente. (Complimenti a leonid!!!)


Il mio punto è: "Chirp, chirp lo script, in cinque minuti" è ovviamente possibile. Ma la pratica dimostra che il semplice TOR non accade.

Ovunque è necessario controllare i valori limite di tutti i parametri, il debugging, l'impostazione di "trappole di errore", ecc.

E per ottenere finalmente un piccolo prodotto decente, piuttosto che uno "script" - è necessario molto tempo, non importa come lo si guardi... Purtroppo.

 

L'advisor sta già scambiando sul reale, oggi ha aperto i primi due scambi a 23, ora mi chiedo come si chiuderà domani. Grazie a tutti per la vostra partecipazione.

E in questa tabella i risultati dell'EA per le previsioni di martedì, segnati "I", questi sono i segnali più brillanti, fai trading solo con loro - questo è il metodo B, i suoi totali nella colonna più a destra, tutti i totali in pip.

Per esempio, nel mio Expert Advisor per martedì CHF ho lasciato solo BBB, BHN e BHN e ho aggiunto la possibilità di aumentare i lotti proporzionalmente al deposito. Il totale nel test per il 10% di deposito è 180% con 55 trade perdenti e redditizi, ma per il 20% di acquisto è 450% di profitto. Pulisci il grano dalla pula rossa, insegna all'Expert Advisor a cambiare i segnali marcati "c" per le previsioni contrastanti di coppie asimmetriche, non ridurre i lotti aggiunti, scambia simultaneamente tutte e quattro le valute e sei "familiare con il direttore del forex". Risolvi questi tre problemi e otterrai questo EA, solo non entrare nel campionato con esso, la mia analitica sta glorificando il mio nome.

Controlla te stesso 450% dal 27.01.08 da solo tre previsioni su 160, CHF su 1H. Era addirittura dell'830%, sarebbe rimasto tale, e sarebbe stato anche di più, se l'Expert Advisor avesse solo aumentato i lotti.

File:
450_2.rar  20 kb
 

Nessuna parola... È come un graal. Perché non l'hai notato prima?

 
lasso:

Uno sguardo più attento rivela le seguenti sfumature:

......

Vi prego di capirmi bene. Questo post non è una lamentela su .......

Non pretendo affatto di scrivere correttamente il codice. Ho specificamente sottolineato che il codice che ho scritto è solo un modello.

Non sono ancora entrato in tutte le sottigliezze della tattica, se non in termini generali. Ma penso già che la tattica meriti un'attenzione molto seria. Mi occupo principalmente di trading stagionale di materie prime ed è per questo che penso che ci siano delle prospettive qui. Perché questo è essenzialmente lo stesso "trading quasi stagionale", ma a breve termine, a tempo:

"Controllo del trend:
Prendiamo l'argento come esempio. La candela di un'ora dalle 18.00 alle 19.00 ha coinciso in più del 70% dei casi con il movimento del prezzo nelle 23 ore successive, cosa che tra l'altro è tipica per alcuni altri metalli. E questo è successo negli ultimi 50, 40, 30, 20 e 10 giorni. Così, dopo le 19, facciamo un ordine in direzione di questo candelabro....
"(da - BR forum).

Inoltre, quasi per caso, ho scoperto - appena ieri (vedi citazione sopra) - che proprio con queste tattiche (beh, quasi "one-to-one") è stato vinto il concorso demo del mese scorso in un noto DC BR. Con un premio di 5000 dollari.

E il partecipante, che ha scambiato futures in questo concorso di settembre, ha ottenuto più di 1000 punti di profitto con questa tattica dall'inizio del mese. (Le regole della demo-competizione sono molto severe - i partecipanti devono descrivere sul forum ogni loro transazione al momento dell'entrata e il rischio (stop-loss) di ogni transazione non deve superare i -200 dollari, altrimenti sarà una squalifica).

Quindi, NorthAlec, - probabilmente stai sogghignando invano.