[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 22

 

Bonjour. Aide pour les nuls : J'ai un EA qui peut placer des ordres en attente sur le min. et le max. de la bougie précédente. Ouverture dans la direction de la bougie.

Le besoin :

- Pour changer le sens de l'ouverture, c'est-à-dire de l'achat en attente à la vente en attente.

- Faire les min et max de la bougie précédente au lieu des min et max du jour précédent .

- Laissez tout le reste tel quel, c'est-à-dire supprimez les ordres, les paramètres de lot, les stop-los, le numéro magique...

Toutes mes actions conduisent soit à l'erreur 130 dans le testeur, soit à l'impossibilité de compiler. Merci pour tout conseil.

Voici le code qui fonctionne, sans mon intervention.

extern double Lot = 0.01 ;
extern int StopLoss = 0 ;
extern int TakeProfit = 0 ;
extern int Magic = 618 ;

int Up_bars = 0 ;
int Down_bars = 0 ;

double StopLoss_new = 0 ;
double TakeProfit_new = 0 ;

//+------------------------------------------------------------------+
//| fonction d'initialisation des experts |
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0) ;
}
//+------------------------------------------------------------------+
//| fonction de désinitialisation des experts |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0) ;
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----

for( int cnt=0;cnt<OrdersTotal();cnt++)
{
if (OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES)>0)
{
if (
(OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)
&& OrderMagicNumber() == Magic
&& OrderSymbol() == Symbol()
&& OrderComment() != DoubleToStr(Bars,0)
)
{
Comment("okkk") ;
OrderDelete(OrderTicket()) ;
}
}
}

StopLoss_new = StopLoss ;
TakeProfit_new = TakeProfit ;

if (Up_bars != Bars)
{
if (High[1]-Ask >= MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
{
if (StopLoss_new != 0) StopLoss_new = NormalizeDouble(High[1]-StopLoss*Point,Digits) ;
if (TakeProfit_new != 0) TakeProfit_new = NormalizeDouble(High[1]+TakeProfit*Point,Digits) ;
if (OrderSend(Symbol(),OP_BUYSTOP,Lot,NormalizeDouble(High[1],Digits),10,StopLoss_new,TakeProfit_new,DoubleToStr(Bars,0),Magic,0,Green) < 0)
{
Sleep(1000) ;
RefreshRates() ;
}
else
{
Up_bars = Bars ;
}
}
}

StopLoss_new = StopLoss ;
TakeProfit_new = TakeProfit ;

if (Down_bars != Bars)
{
if (Bid-Low[1] >= MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
{
if (StopLoss_new != 0) StopLoss_new = NormalizeDouble(Low[1]+StopLoss*Point,Digits) ;
if (TakeProfit_new != 0) TakeProfit_new = NormalizeDouble(Low[1]-TakeProfit*Point,Digits) ;
if (OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Low[1],Digits),10,StopLoss_new,TakeProfit_new,DoubleToStr(Bars,0),Magic,0,Green) < 0)
{
Sleep(1000) ;
RefreshRates() ;
}
else
{
Down_bars = Bars ;
}
}
}


//----
return(0) ;
}
//+------------------------------------------------------------------+

 
delf:

Bonjour. Aidez un imbécile à comprendre :

Auriez-vous par hasard confondu "Une question de débutant" avec " Refaire complètement l'EA"?
 
LazarevDenis:

Capitaine Evidence... et pourtant quelqu'un me donne un indice.

Je vais vous donner un indice - mettez cette expression en mots. Et vous verrez que vous l'avez mal mis.

PS.
S'il est si évident pour vous de savoir où chercher une erreur, alors pourquoi demander ?

 
delf:


Si l'erreur 130. Reconsidérer l'arrêt et la prise en charge.
 
LazarevDenis:

Aidez-nous s'il vous plaît, l'ordre doit être clôturé à 4 fois la distance entre le haut et le prix d'ouverture de l'ordre.

Où est-ce que je me suis trompé ?

tous les ordres sont clôturés dans les 3 pips de l'ouverture


Avez-vous essayé de calculer le résultat de votre formule ? Si ce n'est pas le cas, alors faites-le, parce que j'ai droit à des conneries. C'est peut-être parce que je ne connais pas toutes les conditions.
 

Une seule erreur - je ne sais pas comment la réparer. Où est le problème ?

'Symbol' - initialisation attendue C:\Program Files\MetaTrader Finam\experts\1.mq4 (8, 13)

Symbole - initialisation attendue C:\Program Files\MetaTrader Finam\experts\1.mq4 (8, 13)

extern double lot=0.1;
extern double tp=0;
extern double sl=0;
int Real_Order=-1;    // Пока рыночных нет

string Symb=Symbol;                        // Финанс. инструмент

int start()     // Спец. функция start()


{                                
   OrderSend(Symbol(),OP_BUY,0.1,Ask,0,Bid-sl*Point,Ask+tp*Point); 
   if(IsDemo()) PlaySound("alert.wav");
   
      for (int i=1; i<=OrdersTotal(); i++)       //Цикл по всем ордерам,..
     {                                        //отражённым в терминале
      if(OrderSelect(i-1,SELECT_BY_POS)==true)//Если есть следующий
        {  
               //--------------------------------------------------------------                                   
         if (OrderSymbol()!= Symb) continue;    // Не наш фин.инструм.
         int Tip=OrderType();                   // Тип ордера
         if (Real_Order>1) continue;                   //отложник ордер  
         //------------------------------------------------------ 4 --
         double Price=OrderOpenPrice();         // Цена ордера
         if 
            NormalizeDouble(tp,sl,Digits)       // Выбор самого близкого орд       
           {         
            Real_Order=Tip;                     // Есть рыночный ордер
            int Ticket=OrderTicket();           // Номер ордера
            double Lot=OrderLots();             // Количество лотов
           }
        }                                       //Конец анализа ордера
     }                                          //Конец перебора орд.
     //---------------------------------------------------------------------+
    while(true)                                  // Цикл закрытия орд.
     {
      if (Real_Order==-1)                       // Если рыночных нет
        {
         Alert("По ",Symb," рыночных ордеров нет");
         break;                                 // Выход из цикла закр        
        }
      //--------------------------------------------------------- 7 --
      switch(Real_Order)                        // По типу ордера
        {
         case 0: double Price_Cls=Bid;          // Ордер Buy
            string Text="Buy ";                 // Текст для Buy
            break;                              // Из switch
         case 1: Price_Cls=Ask;                 // Ордер Sell
            Text="Sell ";                       // Текст для Sell
        }
      Alert("Попытка закрыть ",Text," ",Ticket,". Ожидание ответа..");
      bool Ans=OrderClose(Ticket,Lot,Price_Cls,2);// Закрытие ордера
      //--------------------------------------------------------- 8 --
      if (Ans==true)                            // Получилось :)
        {
         Alert ("Закрыт ордер ",Text," ",Ticket);
         break;                                 // Выход из цикла закр
        }    
       //--------------------------------------------------------- 9 --
      int Error=GetLastError();                 // Не получилось :(
      switch(Error)                             // Преодолимые ошибки
        {
         case 135:Alert("Цена изменилась. Пробуем ещё раз..");
            RefreshRates();                     // Обновим данные
            continue;                           // На след. итерацию
         case 136:Alert("Нет цен. Ждём новый тик..");
            while(RefreshRates()==false)        // До нового тика
               Sleep(1);                        // Задержка в цикле
            continue;                           // На след. итерацию
         case 146:Alert("Подсистема торговли занята. Пробуем ещё..");
            Sleep(500);                         // Простое решение
            RefreshRates();                     // Обновим данные
            continue;                           // На след. итерацию
        }
      switch(Error)                             // Критические ошибки
        {
         case 2 : Alert("Общая ошибка.");
            break;                              // Выход из switch
         case 5 : Alert("Старая версия клиентского терминала.");
            break;                              // Выход из switch
         case 64: Alert("Счет заблокирован.");
            break;                              // Выход из switch
         case 133:Alert("Торговля запрещена");
            break;                              // Выход из switch
         default: Alert("Возникла ошибка ",Error);//Другие варианты   
        }
      break;                                    // Выход из цикла закр
     }  
 
   
   return;                                   // Выход из start()
  }
 

alex12, spécifiez quelque chose de précis, comme

string Symb="EURUSD";                        // Финанс. инструмент
 
alex12:

Une seule erreur - je ne sais pas comment la réparer. Où est le problème ?

'Symbol' - initialisation attendue C:\Program Files\MetaTrader Finam\experts\1.mq4 (8, 13)

Symbole - initialisation attendue C:\Program Files\MetaTrader Finam\experts\1.mq4 (8, 13)

Vous avez :

string Symb=Symbol;                        // Финанс. инструмен

Vous en avez besoin :

string Symb=Symbol();                        // Финанс. инструмент
En fait, vous pouvez double-cliquer sur le message d'erreur et le curseur ira à l'endroit spécifié (au passage) où l'erreur de compilation s'est produite, c'est-à-dire ici : (8, 13)

Après cela, d'autres erreurs seront lancées... :)

Déplacez la ligne ci-dessus au début de la fonction start()

C'est un début - il faut ensuite s'occuper des autres erreurs...

 

Bonjour à tous.

Les gars, on a besoin d'aide. Décrire la situation.

le prix actuel est de 1.4100 (par exemple), je dois trouver une barre dont l'ouverture sera dans (plus ou moins 10 pt de 1.4100) de 1.4090 à 1.4110 - c'est ok.

Par exemple, le programme a trouvé la barre avec l'ouverture à 1.4105 qui me convient.

Ensuite, le programme doit comparer cette barre avec la barre à sa gauche et à sa droite et si elle est plus basse, elle sera appropriée.

 

Artem, le truc ici, c'est qu'il y a une ligne comme celle-ci en dessous :

if (OrderSymbol()!= Symb) continue;    // Не наш фин.инструм.

La façon dont vous avez suggéré n'a donc pas beaucoup de sens - si je comprends bien ce que veut Alex12.

Raison: