Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 505

 
Forexman77:
Vous en avez besoin, bien sûr ! Eh bien, comment appliquer cette construction à la recherche du minimum ? Je ne peux pas le faire avec mon cerveau)

Pour trouver le maximum, on attribue à la variable val une valeur de 0 (évidemment inférieure à toutes les valeurs des indicateurs).

Cela signifie que pour trouver le minimum, nous devons ajouter une valeur délibérément plus élevée. Vous pouvez utiliser la constante EMPTY_VALUE ou la valeur de l'indicateur directement sur certaines barres parmi lesquelles le minimum est recherché.

val=EMPTY_VALUE;

for(i=1;i<=15;i++) {

    ind=iMA(...,i);

   if(ind< val) val=ind;

}

Ou comme ça :

val=MA(...,1);


for(i=2;i<=15;i++) {

    ind=iMA(...,i);

   if(ind< val) val=ind;

}
 
Forexman77:

Vous en avez besoin, bien sûr ! Eh bien, comment appliquer cette construction pour trouver le minimum ? Je n'arrive pas à comprendre.)
Et je veux apprendre comment déclarer un tableau. J'ai essayé de cette façon :

Elle sort à -1.



La boucle passe par 34 valeurs et le tableau ne contient que 33 cellules, correct.

Et essayez ArrayMinimum(num_array,WHOLE_ARRAY,0) ;

 
Forexman77:

... Je veux aussi apprendre comment déclarer un tableau...

Si c'est juste pour la formation et le but cognitif...

La période à laquelle le minimum et le maximum sont déterminés - il doit s'agir d'un paramètre externe pour permettre le réglage et l'optimisation.

extern int p=34; 

Donc, tout d'abord, le tableau est déclaré sans taille :

double val[];

La déclaration du tableau se fait dans une section commune, pas dans une fonction.

Dans la fonction init, la taille est fixée au tableau :

int init(){

   ArrayResize(val,p);

} 

Maintenant, dans la fonction de démarrage, nous remplissons le tableau :

for(int i=0;i<p;i++) val[i]=iMA(...,i+1);

Enfin , ArrayMaximum() et ArrayMinimum() sont appliquées au tableau.

 
Integer:

Pour trouver le maximum, on attribue à la variable val une valeur de 0 (évidemment inférieure à toutes les valeurs des indicateurs).

Cela signifie que pour trouver le minimum, nous devons ajouter une valeur délibérément plus élevée. Vous pouvez utiliser la constante EMPTY_VALUE ou la valeur de l'indicateur directement sur certaines barres parmi lesquelles le minimum est recherché.

Ou comme ça :

Merci beaucoup !
 
evillive:

La boucle passe par 34 valeurs, alors que le tableau ne contient que 33 cellules, corrigez-la.

Et essayez ArrayMinimum(num_array,WHOLE_ARRAY,0);

Merci beaucoup !
 

Chers collègues programmeurs ! Je suis en difficulté, aidez-moi s'il vous plaît.

Je me suis déjà creusé les méninges à propos de ce code.

//В условии прописано что работаем с 
if(OrderType() == OP_BUY){}
//, но метатрейдер почему то игнорирует это условие, и работает только с OP_SELLLIMIT

Voici l'ensemble de la fonction :

//+------------------------------------------------------------------+
//| Модифицируем стоплоссы                                           |
//+------------------------------------------------------------------+   
void modify_stoploss()
  {
   for(int i=0; i<=OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderMagicNumber()==magic)
              {
               if(OrderType() == OP_BUY)
                 {
                  if(chek_way()==1)
                    {
                     double stoploss=NormalizeDouble(pre_openPrice(OP_BUY),Digits);
                     Print("Стоплосс для Бай ",OrderTicket()," = ", stoploss);
                     OrderModify(OrderTicket(),OrderOpenPrice(),stoploss,OrderTakeProfit(),0,CLR_NONE);
                    }
                 }
               if(OrderType() == OP_SELL)
                 {
                  if(chek_way()==0)
                    {
                     stoploss=NormalizeDouble(pre_openPrice(OP_SELL),Digits);
                     Print("Стоплосс для Cелл ",OrderTicket()," = ", stoploss);
                     OrderModify(OrderTicket(),OrderOpenPrice(),stoploss,OrderTakeProfit(),0,CLR_NONE);
                    }
                 }
              }
           }
        }
     }
  }

Reaches Print et voilà ce que ça donne :


Alors que le ticket : 225299700 est un ticket de commande OP_SELLLIMIT.

Et il modifie le stop loss de cet ordre sélectionné comme prévu. Mais OP_BUY n'est pas vu, bien que je sois sûr qu'il existe :

Quel pourrait être le problème ? Pourquoi est-ce que ça me fait ça ? Aidez-moi à comprendre !

 
#property strict
#include <Indicators\Trend.mqh>
bool ind;
CiMA MA;
extern int pos=1;
extern int sl=40;
extern int tp=70;
datetime time;
datetime time2;
bool trade=false;
bool trade2=false;
int a,b;
int OnInit()
  {
//---
   MA.Create(Symbol(),PERIOD_CURRENT,10,6,MODE_EMA,PRICE_CLOSE);//создал машку
//---
   return(INIT_SUCCEEDED);
   
  }
void OnTick()
  {
//---
  if(IsNewBar()==true)//если новый бар включаемся
     {
     if(buy(pos)==true)//если цена выше МА продолжаем
     {
      if(!ExistPositions(Symbol(),-1,-1,0))//если нету открых ордеров продолжаем
        {

         if(GetTypeLastClosePos(Symbol(),-1)!=OP_BUY)//если тип последней закрытой позиции был не на покупку то тогда только покупаем таким образом я пред остерегаюсь от повторных входов в покупку если цена 
//все ещо выше МА...но почему то не работает открываются и дальше сделки на покупку если ордер закрылся выше МА....ХОТЯ НЕ ДОЛЖО ТАК КАК Я ОГРАНИЧИЛ ПО ТИПУ ПОЗИЦИИ ПОСЛЕДНЮЮ СДЕЛКУ И ОНИ ДОЛЖНЫ ТОЛЬКО 
//       ЧЕРЕДОВАТСЯ И УЖ НИ КАК НЕ ПОВТОРЯТСЯ ПО НЕСКОЛЬКО РАЗ ПОДРЯД
           {
            trade=true;
           }
  if(trade==true)
        {
         OpenPosition(Symbol(),OP_BUY,0.1,Ask-sl*Point,Ask+tp*Point);
         trade=false;
        }
}
        }
    
     
if(sell(pos)==true)
{
   if(!ExistPositions(Symbol(),-1,-1,0))
     {

      if(GetTypeLastClosePos(Symbol(),-1)!=OP_SELL)
        {
         trade2=true;
        }

      if(trade2==true)
        {
         OpenPosition(Symbol(),OP_SELL,0.1,Bid+sl*Point,Bid-tp*Point);
         trade=false;
      }
  }}
 }
  }

//возвращает истину если закрытие бара  с указаной позицией выше МА

bool buy(int pos)
  {
   if(iClose(Symbol(),0,pos)>MA.Main(1))
      return true;
   else
      return false;
  }
//+------------------------------------------------------------------+
//| возвращает истину если закрытие бара  с указаной позицией ниже МА
//+------------------------------------------------------------------+
bool sell(int pos)
  {
   if(iClose(Symbol(),0,pos)<MA.Main(1))
      return true;
   else return false;
  }
TOUTES LES FONCTIONS, sauf les deux conditions d'achat et de vente, sont tirées de la branche de Kim....... Veuillez me dire où je me suis trompé... J'ai besoin d'une transaction par intersection.
 

une autre question sur la fonction

/SetRectangle(clrBlue,"Прямоугольник",Time[10],Low[10],Time[0],High[0]);
//Если bk=true, то будет залит цветом, если false - то просто "рамка" ... sz при "просто рамка" - это ширина линий "рамки"
//

//+----------------------------------------------------------------------------+
void SetRectangle(color cl, string nm="", datetime t1=0, double p1=0, datetime t2=0, double p2=0, int sz=0, bool bk=true) {
   if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_RECTANGLE, 0, 0, 0, 0, 0);
   ObjectSet(nm, OBJPROP_TIME1   ,t1);
   ObjectSet(nm, OBJPROP_PRICE1  ,p1);
   ObjectSet(nm, OBJPROP_TIME2   ,t2);
   ObjectSet(nm, OBJPROP_PRICE2  ,p2);
   ObjectSet(nm, OBJPROP_COLOR   ,cl);
   ObjectSet(nm, OBJPROP_WIDTH   ,sz);
   ObjectSet(nm, OBJPROP_BACK    ,bk);
}

comment faire en sorte qu'un rectangle se dessine en avant plutôt qu'en arrière, par exemple cinq barres en avant à un prix spécifié...... et ne pas le redessiner

 
artmedia70:

J'ai vérifié. Merci.

La question ne contient pas beaucoup d'informations. Il y a beaucoup d'extrêmes sur les barres horaires dans le mois. Et d'ailleurs, les extrema de quoi exactement ?


Je suppose qu'il n'y a que deux extrêmes mensuels - min et max... Eh bien, peu importe, au début c'était un long code, c'est pourquoi j'ai demandé de l'aide... Mais ensuite, j'ai réalisé que j'avais réussi à le faire tenir en quatre lignes.
 
Dites-moi s'il vous plaît. Dans la construction au-dessus de 600. Le courtier peut-il donner des volumes réels ?
Raison: