Que quelqu'un écrive un script pour 5 wmz. - page 14

 
Profitabl:

Ce code se compile avec quatre erreurs, peut-être manque-t-il des parenthèses ?


Essayez comme ça :

Eh bien, les fonctions NumberOfPositions et ClosePositions doivent être présentes dans le code

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.

 

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

Il n'y a pas eu 4 erreurs. Il y avait 4 fonctions non utilisées. J'ai tout nettoyé.

Je vais le répéter. Vérifier pour 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:

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

Il n'y a pas eu 4 erreurs. Il y avait 4 fonctions non utilisées. J'ai tout nettoyé.

Je vais le répéter. Vérifiez sur tf=n1.


Vous avez en fait donné un exemple, vous pouvez envoyer WMR où vous pouvez transférer 160 roubles à, au moins à une organisation caritative.

La seule chose que je ne peux pas faire est de fermer les positions SELL le vendredi à 23h00, sinon seuls les BUY sont fermés, tandis que les SELL sont modifiés pendant trois ou quatre jours et bien sûr les SELL sont fermés.

Ici ces données de l'euro et de la livre peuvent être prises en compte comme des conditions supplémentaires ?, juste quand les prévisions ne sont pas asymétriques B=BB ou H=HH on devrait acheter dans la direction opposée, cela améliore le résultat beaucoup plus.

Mais si les mêmes données pour la livre et l'euro au même moment
EUR L'euro est "en baisse le mardi, en baisse le mercredi, en baisse le jeudi".
GBP "croissant, mercredi croissant, mardi décroissant".
alors n'ouvrez pas "VENDRE", mais "ACHETER".

En parlant de rentabilité, si vous retirez les prévisions inexactes, seulement 70 trades de six prévisions du vendredi donnent environ 1500 pips. On peut multiplier ce chiffre par cinq le reste des jours, et augmenter les lots proportionnellement au dépôt par deux autres fois - peu importe le nombre, le seuil de rentabilité est atteint. Je donnerai à Leonid un tableau de 160 prévisions EUR GBP CHF JPY gratuitement pour la participation au problème, envoyez WMR ale2715@yandex.ru et dans la lettre de retour recevra des prévisions, écrivez un EA, vous gagnerez, mais ne participez pas au championnat avec lui, je vais le brancher au championnat aussi.

 
lasso:

Essayez de cette façon :

Bien, et les fonctions NumberOfPositions et ClosePositions devraient être présentes dans le code


Merci, on va laisser ça comme ça pour l'instant.
 
Profitabl:

La seule chose qui ne fonctionne pas est que les positions SELL sont également fermées le vendredi à 23h00, sinon seuls les BUY sont fermés, tandis que les SELL sont modifiés pendant trois ou quatre jours et bien sûr les SELL sont fermés.

En effet... )))

Cela devrait être comme ceci

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

L'ouverture d'une position de vente ne faisait pas du tout partie du code. Car dans le travail initial, il s'agissait d'ouvrir une position d'achat sur le franc.

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

Oui, je dois modifier un peu la fermeture - ClosePositions(NULL,-1, Magic)

 
leonid553:

Il n'y a pas eu quatre erreurs. Il y avait quatre fonctions inutilisées. J'ai tout nettoyé.

Je vais le répéter. Contrôle sur tf=n1

Un examen plus approfondi a révélé les nuances suivantes :

1) Les conditions se contredisent

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


2) l'appel à des séries temporelles (de type Open[48]) n'est pas tout à fait correct lors du test sur l'historique car il peut très bien y avoir des trous dans l'historique et donc le prix n'est pas obtenu à partir de la barre sur laquelle le démarreur a écrit.


3) Condition de fermeture.

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

Ce n'est pas universel car par exemple la société de courtage a Al...et il n'y a pas de barre le vendredi avec la valeur de l'heure égale à 23


4) Et quelques autres nuances mineures, mais leur influence sur la courbe d'équilibre résultante n'est pas du tout mineure..... ))



S'il vous plaît, supportez-moi correctement. Ce message n'est pas une plainte contre leonid553, loin de là. (Bravo à leonid !!!)


Ce que je veux dire, c'est que "Chirp, chirp le script, dans cinq minutes" est bien sûr possible. Mais la pratique montre que le simple RPT ne se produit pas.

Partout, il faut vérifier les valeurs limites de tous les paramètres, déboguer, mettre en place des "pièges à erreurs", etc.

Et pour obtenir enfin un petit produit décent, plutôt qu'un quelconque "script" - il faut beaucoup de temps, quelle que soit la façon dont on voit les choses... Malheureusement.

 

Le conseiller est déjà en train de négocier sur le réel, aujourd'hui il a ouvert les deux premières transactions à 23, maintenant je me demande comment il va fermer demain. Merci à tous pour votre participation.

Et dans ce tableau, les résultats de l'EA pour les prédictions de mardi, marqués "I", ce sont les signaux les plus brillants, ne tradez que par eux - c'est la méthode B, ses totaux dans la colonne la plus à droite, tous les totaux en pips.

Par exemple, dans mon Expert Advisor pour le mardi CHF, je n'ai laissé que BBB, BHN et BHN et j'ai ajouté la possibilité d'augmenter les lots proportionnellement au dépôt. Le total dans le test pour un dépôt de 10% est de 180% avec 55 trades perdants et rentables, mais pour un achat de 20%, le profit est de 450%. Vous nettoyez le grain de l'ivraie rouge, apprenez à l'Expert Advisor à changer les signaux marqués "c" pour des prévisions contradictoires de paires asymétriques, ne réduisez pas les lots ajoutés, tradez simultanément les quatre devises et vous êtes "familier avec le directeur du forex". Résolvez ces trois problèmes et vous obtiendrez cette EA, mais n'entrez pas dans le championnat avec elle, mon analyse glorifie mon nom.

Vérifiez vous-même 450% du 27.01.08 à partir de seulement trois pronostics sur 160, CHF sur 1H. Il était même de 830%, serait resté ainsi, et aurait même été plus, si le Conseiller Expert avait seulement augmenté les lots.

Dossiers :
450_2.rar  20 kb
 

Pas de mots... C'est comme un graal. Pourquoi ne l'avez-vous pas remarqué avant ?

 
lasso:

Un examen plus approfondi révèle les nuances suivantes :

......

Veuillez me comprendre correctement. Ce message n'est pas une plainte concernant .......

Je ne prétends pas du tout écrire le code correctement. J'ai spécifiquement indiqué que le code que j'ai écrit est juste un modèle.

Je ne suis pas encore entré dans toutes les subtilités de la tactique, sauf en termes généraux. Mais je pense déjà que cette tactique mérite une attention très sérieuse. Je m'occupe principalement du commerce saisonnier des matières premières et c'est pourquoi je pense qu'il y a des perspectives ici. Car il s'agit ici essentiellement du même "trading quasi-saisonnier", mais à court terme, sur l'horloge :

"Contrôle de tendance :
Prenons l'exemple de l'argent. Le chandelier d'une heure de 18 à 19 heures a coïncidé dans plus de 70 % des cas avec l'évolution du prix dans les 23 heures suivantes, ce qui est d'ailleurs typique pour certains autres métaux. Et cela s'est produit au cours des 50, 40, 30, 20 et 10 derniers jours. Donc, après 19 heures, nous passons un ordre en direction de cette bougie.....
" (extrait du forum BR).

De plus, tout à fait par hasard, j'ai découvert - pas plus tard qu'hier (voir la citation ci-dessus) - que c'est exactement avec ce genre de tactique (enfin, presque "one-to-one") qu'a été remporté le mois dernier le concours de démonstration dans un BR DC bien connu. Avec un prix de 5000 $.

Et le participant, qui a négocié des futures dans ce concours de septembre, a obtenu plus de 1000 points de profit avec cette tactique dès le début du mois. (Les règles de la compétition démo sont très strictes - les participants doivent décrire sur le forum chacune de leurs transactions au moment de l'entrée et le risque (stop-loss) de chaque transaction ne doit pas dépasser -200 dollars, sinon c'est la disqualification).

Alors, NorthAlec, - vous ricanez probablement en vain.