[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 492

 

Aidez-moi à ajouter, le décalage horizontal
et le décalage vertical
Si cela fonctionne aussi..........cloud

//+------------------------------------------------------------------+
//|                                                Price Channel.mq4 |
//+------------------------------------------------------------------+



#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 DodgerBlue
//---- input parameters
extern int ChannelPeriod = 14;
//---- buffers
double UpBuffer[];
double DnBuffer[];
double MdBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
//---- indicator line
   SetIndexStyle(0, DRAW_LINE);
   SetIndexStyle(1, DRAW_LINE);
   SetIndexStyle(2, DRAW_LINE);
   SetIndexBuffer(0, UpBuffer);
   SetIndexBuffer(1, DnBuffer);
   SetIndexBuffer(2, MdBuffer);
//---- name for DataWindow and indicator subwindow label
   short_name="Price Channel("+ChannelPeriod+")";
   IndicatorShortName(short_name);
   SetIndexLabel(0, "UpCh");
   SetIndexLabel(1, "DownCh");
   SetIndexLabel(2, "MidCh");
//----
   SetIndexDrawBegin(0, ChannelPeriod);
   SetIndexDrawBegin(1, ChannelPeriod);
   SetIndexDrawBegin(2, ChannelPeriod);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Price Channel                                                         |
//+------------------------------------------------------------------+
int start()
  {
   int i, counted_bars = IndicatorCounted();
   int    k;
   double high, low, price;
//----
   if(Bars <= ChannelPeriod) 
       return(0);
//---- initial zero
   if(counted_bars < 1)
      for(i = 1;i <= ChannelPeriod; i++) 
          UpBuffer[Bars-i] = 0.0;
//----
   i = Bars - ChannelPeriod - 1;
   if(counted_bars >= ChannelPeriod) 
       i = Bars - counted_bars - 1;
   while(i >= 0)
     {
       high = High[i]; 
       low = Low[i]; 
       k = i - 1 + ChannelPeriod;
       while(k >= i)
         {
           price = High[k];
           if(high < price) 
               high = price;
           price = Low[k];
           if(low > price)  
               low = price;
           k--;
         } 
       UpBuffer[i] = high;
       DnBuffer[i] = low;
       MdBuffer[i] = (high + low) / 2;
       i--;
     }
   return(0);
  }
//+------------------------------------------------------------------+
 
splxgf >>:

Можно сделать горячий старт сразу в

init(){

while (true) {

//Вечный кайф

}

Merci splxgf. J'ai essayé, mais ... Eh bien, je suppose que je vais devoir laisser cette entreprise jusqu'à des temps meilleurs. Ou peut-être que quelqu'un d'autre s'intéressera à ce raffinement, à mon avis utile, de nombreux experts.

 
hedger писал(а) >>

Merci splxgf. J'ai essayé, mais ... Eh bien, je suppose que je vais devoir laisser cette entreprise jusqu'à des temps meilleurs. Et peut-être que quelqu'un d'autre s'intéressera à ce raffinement, à mon avis utile, de nombreux experts.


voir comment cela doit être fait
int start()
{
while(true)
{
Sleep(5000) ; // Délai de 5 secondes avant la prochaine itération.
RefreshRates() ; // Rafraîchir les données
// le reste du code. Conditions d'ouverture, de fermeture, etc.
}
}
 
Djonon >>:

ПОмогите добавить, Сдвиг по горозинтали
и вертикали
Если ещё и работать бутет..........клювоо

extern int Сдвиг_по_горозинтали = 14; //КОЛ-ВО БАРОВ
extern int и_вертикали = 14; //КОЛ-ВО ПУНКТОВ
Dossiers :
 
hedger >>:

Для закрытия ордеров я пользуюсь советником JimsCloseOrders, который может закрывать любые ордера по выбору – или профитные, или убыточные, или все подряд, правда пришлось его немного подкорректировать - вот в этих двух строках кода

extern bool CloseOpenOrders = true;

extern bool CloseOrdersWithPlusProfit = false;

false и true надо поменять местами, иначе, если такую настройку выполнять при установке на график, почему-то начинает закрывать все ордера (видимо из-за последовательности выполнения команд программой, но не уверен, не спец).

У меня вопрос к профи.

Требуется, как можно быстрее запустить, например, советника, о котором шла речь выше, но все советники и скрипты начинают действовать с момента поступления первого тика на график. Если же выбранная для установки советника валютная пара оказалась не очень "активной" в этот момент, то потери могут быть значительными.

Существует ли возможность создания "общего" графика для всех валют, или воспользоваться поступающим тикам любой другой пары? Тики же в терминал поступают почти непрерывно. Где их можно перехватить?

C'est simple dans

int init()
  {
    трали вали..
    start();
  }
Lors de l'initialisation, exécutez immédiatement la fonction
start();
Voir aussi l'émulation de tiques mais ce n'est pas tout ...

start() est la fonction principale. Dans les Expert Advisors, il est appelé après le prochain tick. Pour les indicateurs personnalisés, il est appelé pendant le recalcul après avoir attaché l'indicateur au graphique, à l'ouverture du terminal client (si l'indicateur est attaché au graphique), ainsi qu'après l'arrivée du prochain tick. Dans les scripts, il est exécuté immédiatement après l'attachement au graphique et l'initialisation. S'il n'y a pas de fonction start() dans le module, ce module (Expert Advisor, script ou indicateur personnalisé) ne peut pas être lancé.
 
int start()
{
double bid =MarketInfo("GBPUSD",MODE_BID) ;
double ask =MarketInfo("GBPUSD",MODE_ASK) ;
double point =MarketInfo("GBPUSD",MODE_POINT) ;
OrderSend("GBPUSD",OP_BUY,0.01,ask,2,bid-15*Point,bid+15*Point) ;
Alert("GetLastError()") ;
retour ;
}

J'ai pris ce script dans le tutoriel ; je voulais voir comment il fonctionnait ; je l'ai compilé et enregistré. Quand je l'exécute, il échoue, pourquoi ?
Il ne me donne aucune erreur, il ne fonctionne tout simplement pas...
 
Messieurs. Bonsoir à tous. Je n'ai absolument aucun succès dans la maîtrise de la langue. (((((((
J'essaie de réécrire quelque chose à partir de tas d'Expert Advisors, mais quand je dois écrire quelque chose de concret, je me sens bête...(((
Et maintenant...
Je voudrais faire la ligne suivante dans Expert Advisor :
J'ai un algorithme d'ouverture, j'ai du profit, et je veux qu'il se ferme après un certain temps, quel que soit le résultat,
- voici comment l'ajouter maintenant ?????????
Je veux pouvoir définir cette heure dans le conseiller expert. Par exemple, je veux que l'affaire se conclue d'elle-même après deux, trois ou quatre heures... En fonction de l'heure de diffusion des informations, par exemple. Je pense que vous comprenez ce que je veux dire.
Si quelqu'un le sait, peut-être que de telles questions ont déjà été posées sur le forum, donnez-moi au moins le lien. J'ai essayé de lire le manuel, un seul nerf, écrit pour les programmeurs avancés, et certainement pas pour les dames.
Et si quelqu'un n'est pas difficile et que cela semble une bagatelle, alors écrivez les lignes, je les colle au moins, alors peut-être que quelque chose fonctionnera.
Une grande femme s'il vous plaît.......
 
Magiyanka >>:
Господа. Всем добрый вечер. У меня прям совсем ничего не получается в освоении языка. (((((((

extern int Час=2; //В начало кода
extern int Мин=6;
extern int Slippage  =  25;
extern int STUPID= 12830454;
//В конец кода отдельной функцией
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
void  OrdersCloseByTime(int MagicNumber)
{
   for(int i = 0; i < OrdersTotal(); i++)
   {
      // already closed
      if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES ) == false) continue;
      // not current symbol
      if(OrderSymbol() != Symbol()) continue;
      // order was opened in another way
      if(OrderMagicNumber() != MagicNumber) continue;
      if(Time[0]-OrderOpenTime( )>=Час*60*60+Мин*60){
        if(OrderType() == OP_SELL)
        OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), Slippage, Red);
        if(OrderType() == OP_BUY)
        OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), Slippage, Blue);
        }
   }
   
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
int start()
{
 OrdersCloseByTime(STUPID);//STUPID это мажик номер Вашего советчика
 трали вали ...
Les positions de fermeture, où les mettre pour qu'elles ne se perdent pas ? !
 
Lim1 >>:

int start()
{
double bid =MarketInfo("GBPUSD",MODE_BID);
double ask =MarketInfo("GBPUSD",MODE_ASK);
double point =MarketInfo("GBPUSD",MODE_POINT);
OrderSend("GBPUSD",OP_BUY,0.01,ask,2,bid-15*Point,bid+15*Point);
Alert (GetLastError());
return;
}

Взял этот скрипт из учебника, хотел посмотреть как он работает - скомпилировал, сохранил. Запускаю - безрезультатно, почему?
Ошибок не выдает, просто не работает...

Essayez de cette façon.

int start()
{
double bid =MarketInfo("GBPUSD",MODE_BID);
double ask =MarketInfo("GBPUSD",MODE_ASK);
double point =MarketInfo("GBPUSD",MODE_POINT);
int tickkkkkkk=OrderSend("GBPUSD",OP_BUY,1,ask,2,bid-15*Point,bid+15*Point);
if(tickkkkkkk==-1){
 Alert ("Ошибка № "+GetLastError());
 if(GetLastError()==131)
 Alert ("Неправильный объем");
 if(GetLastError()==6)
 Alert ("Нет связи с торговым сервером");
 }
 else Alert ("Все ОК!!!");
return;
}
 
ça ne marche pas, ça ne ferme pas à temps et c'est tout.
Raison: