AIDEZ QUI PEUT ! !! - page 6

 
extern string БАЙ = "NASTROI:";
extern int StopLoss = 200; // SL для открываемого ордера
extern int TakeProfit = 40;
extern double TrailingStop = 3;
extern double TrailingStep =0;
extern string ЛОТ = "NASTROI LOT:";
extern double Lots = 0.1; // Жестко заданное колич. лотов
extern double ДОЛЯ_ДЕП_ОСН_ОРД = 0; // доля от свободных средств 
extern double MAX_LOT = 40;
extern bool NORMALIZ = false;
extern string П = "EDGE:";
extern int МАКС_КОЛИЧ_ОРДЕРОВ = 111;
extern double БАЛАНС_МАРЖИ=1;
extern int  TFCLOSE=5;
extern string FLAG = "FLAGS:";
extern int BUY =1; //блок бай
extern int SELL =1; //блок сел
extern int MINIM=1;
extern double F=1;
extern int ДИСТАНЦИЯ_ВЫСТАВЛЕНИЯ_ОТЛОЖ = 5;
extern int MAGA = 7777; //магик № бай
extern double Z=10;

//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
bool DS=0,DB=0,ZB=0,ZS=0;

void deinit() {
   Comment("");
}

int start()
{
  //bool DS=0,DB=0,ZB=0,ZS=0;
  int R=1,CB=0;
  double Lts,
  FB=F,FS=F,MG,ZL=0,  
  Min_Lot,
  Lts1,
  TPD1;
  bool Cls_B = false,
  Cls_S = false,
  Opn_B = false,
  Opn_S = false;



  
  //00000000000000000000000000000000000000000000000000000
        //+------------РАСЧЁТ СТОИМОСТИ------------------------------------------------------+        
          // Стоимость ордеров
       
        if(БАЛАНС_МАРЖИ>0&&NORMALIZ==false)
        {
        RefreshRates();
        if(AccountFreeMargin()>AccountMargin())MG=AccountFreeMargin();
        //if(AccountFreeMargin()<AccountMargin())MG=0;
        if(БАЛАНС_МАРЖИ*AccountFreeMargin()<AccountMargin())R=0;
        Min_Lot = MarketInfo(Symbol(), MODE_MINLOT);
        
        if(Lots > 0 && ДОЛЯ_ДЕП_ОСН_ОРД == 0)
          Lts = Lots;
        if(ДОЛЯ_ДЕП_ОСН_ОРД > 0)
          Lts=MG/MarketInfo (Symbol(), MODE_MARGINREQUIRED)*ДОЛЯ_ДЕП_ОСН_ОРД;
        if(Lts > MAX_LOT)
          Lts = MAX_LOT;
        if(MG==0)Lts =0;
        if(MG>0&&Lts < Min_Lot&&MINIM==0)
        {
        R=0;
        Lts = 0;// Min_Lot;
        }
        if(MG>0&&Lts < Min_Lot&&MINIM==1)
        {
        Lts = Min_Lot;
        }
        Lts1=Lts;
        }
        //................................
        int m;
        if(NORMALIZ==true&&БАЛАНС_МАРЖИ>0)
        {
        if(AccountFreeMargin()>AccountMargin())MG=AccountFreeMargin();
        if(AccountFreeMargin()<AccountMargin())MG=0;
        Min_Lot = MarketInfo(Symbol(), MODE_MINLOT);
        //........................................................
        if(Lots > 0 && ДОЛЯ_ДЕП_ОСН_ОРД == 0)
          Lts = Lots;
        if(ДОЛЯ_ДЕП_ОСН_ОРД>0)
          m=БАЛАНС_МАРЖИ*MG/MarketInfo (Symbol(), MODE_MARGINREQUIRED)*ДОЛЯ_ДЕП_ОСН_ОРД/Min_Lot;
          Lts = m*Min_Lot;
        
        if(Lts > MAX_LOT)
          Lts = MAX_LOT;
        if(MG==0)Lts =0;
        if(MG>0&&Lts < Min_Lot)
        {
         Lts =Min_Lot;
        // R=O;
        }
         Lts= Lts;
        }
         
        //................................
        
        if(БАЛАНС_МАРЖИ==0)
        {
         RefreshRates();
        Min_Lot = MarketInfo(Symbol(), MODE_MINLOT);       
        if(Lots > 0 && ДОЛЯ_ДЕП_ОСН_ОРД == 0)
          Lts = Lots;
        if(ДОЛЯ_ДЕП_ОСН_ОРД > 0)
          Lts=AccountFreeMargin()/MarketInfo (Symbol(), MODE_MARGINREQUIRED)*ДОЛЯ_ДЕП_ОСН_ОРД;
        if(Lts > MAX_LOT)
          Lts = MAX_LOT;        
        if(Lts < Min_Lot&&MINIM==0)
        {
        R=0;
        Lts = 0;//Min_Lot;
        }
        if(Lts < Min_Lot&&MINIM==1)
        {
        Lts = Min_Lot;
        }
        Lts1=Lts;
        }
        
for(int x = 0; x < OrdersTotal(); x++)
        {
          if(OrderSelect(x, SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MAGA)
          switch(OrderType())
          {
          case 0:DB=1;break;
          case 1:DS=1;break;
          case 4:ZB=1;break;
          case 5:ZS=1;break;
          
           }
      //if(OrderType() == OP_BUYSTOP)ZB=1;
      //if(OrderType() == OP_SELLSTOP)ZS=1;
     
      //if(OrderType() == OP_SELL)DB=1;
         
      if(OrderType() == OP_SELLSTOP&&DB==1){OrderDelete(OrderTicket(),CLR_NONE);return(0);}
     
     // if(OrderType() == OP_BUY)DS=1;
      
      if(OrderType() == OP_BUYSTOP&&DS==1){OrderDelete(OrderTicket(),CLR_NONE);return(0);}
      
        
    
      //...................................................................

        //.................ТЕЙК И СТОП....................... 
       
for(int y = 0; y < OrdersTotal(); y++)
  {
    
    if(!OrderSelect(y, SELECT_BY_POS, MODE_TRADES)) continue;
    if(OrderSymbol() != Symbol()) continue;
    if(OrderMagicNumber() != MAGA) continue; 

  }
    if(OrderType() == OP_BUY&&OrderStopLoss()==0||OrderTakeProfit()==0&&StopLoss>0)
    {
      OrderModify(OrderTicket(), OrderOpenPrice(),OrderOpenPrice()-StopLoss*Point ,
       OrderOpenPrice()+TakeProfit*Point ,MAGA, CLR_NONE);
       return(0);
    }

    if(OrderType() == OP_SELL&&OrderStopLoss()==0||OrderTakeProfit()==0&&StopLoss>0)
    {
      OrderModify(OrderTicket(), OrderOpenPrice(),OrderOpenPrice()+StopLoss*Point ,
       OrderOpenPrice()-TakeProfit*Point ,MAGA, CLR_NONE);
       return(0);
    }
    }
 //....................................................................   
   //OOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
 
       if(ZB==0&&ZS==0&&DB==0&&DS==0        
         )          
        {
         Opn_B = true;
         Opn_S = true;
        }     
        
//OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO

     // Открытие ордеров
        while(true)
        {     
  //OOOOOOOOOOOOOOOOOOOOOOOO ОСНОВНЫЕ OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO

      
     
           if(Opn_B == true && BUY ==1)
          {
           // CS=1; 
           Alert("Попытка BUY");
            if(Opn_B == true && BUY ==1)
            OrderSend(Symbol(), OP_BUYSTOP,FB*Lts,Ask+Z*ДИСТАНЦИЯ_ВЫСТАВЛЕНИЯ_ОТЛОЖ*Point,2,0,0,"",MAGA,0,Aqua); 
                  if(Fun_Error(GetLastError()) == 1)  
              continue;
           // return(0);
          }
          //--------------------------------------------------
           
         
           if(Opn_S == true&&SELL==1)
          {
           // CB=1;
            Alert("Попытка SELL");
            if(Opn_S == true&&SELL==1)
            OrderSend(Symbol(), OP_SELLSTOP, FS*Lts,Bid-Z*ДИСТАНЦИЯ_ВЫСТАВЛЕНИЯ_ОТЛОЖ*Point,2,0,0,"",MAGA,0,Orange);//TimeCurrent()+TIMELIVE*60
                  if(Fun_Error(GetLastError()) == 1)
              continue;
            return(0);
          }                      
          break;
        }
        return(0);
     }
  
//+------------------------------------------------------------------+

int Fun_Error(int Error)
{
  switch(Error)
  {
    case 4:
      Alert("Торговый сервер занят. Пробуем ещё раз..");
    Sleep(3000);
    return(1);
    case 135:
      Alert("Цена изменилась. Пробуем ещё раз..");
    RefreshRates();
    return(1);
    case 136:
      Alert("Нет цен. Ждём новый тик..");
    while(RefreshRates() == false)
      Sleep(1);
    return(1);
    case 137:
      Alert("Брокер занят. Пробуем ещё раз..");
    Sleep(3000);
    return(1);
    case 146:
      Alert("Подсистема торговли занята. Пробуем ещё..");
    Sleep(500);
    return(1);
    case 2:
      Alert("Общая ошибка.");
    return(0);
  }
  
  //+------------------------------------------------------------------+
}

//.............................................................

 
LES OPTIONS ONT PEU DE CHANCES DE FONCTIONNER ET, COMME JE L'AI DÉJÀ ÉCRIT, LES OPTIONS ONT PEU DE CHANCES DE FONCTIONNER...
 

Tout d'abord, j'ai dit de déclarer les variables à l'intérieur de la FONCTION DE DÉMARRAGE.

Deuxièmement, pourquoi avez-vous besoin d'une deuxième boucle ? Et pourquoi avez-vous ajouté des chèques supplémentaires au mien ?

 
Lorsque vous passez par les commandes et enregistrez leur type, enregistrez leur ticket et leurs arrêts, de sorte que vous ne devez pas passer par 10 itérations.
 
Techno:
son code est complètement fouillis, les mêmes vérifications dans la boucle sont répétées 10 fois, il y a une tonne d'erreurs, même la fonction de modification a un magik au lieu d'un délai d'expiration... c'est des conneries, et c'est notre faute pour ne pas l'avoir bien expliqué...

CE N'EST PAS UNE MAUVAISE EXPLICATION, C'EST UNE MAUVAISE EXPLICATION, TU PERDS DE MANIÈRE DIFFÉRENTE CE QUE J'AVAIS INITIALEMENT ET AVEC LA MÊME ERREUR.
 
Techno:

Tout d'abord, j'ai dit de déclarer les variables à l'intérieur de la FONCTION DE DÉMARRAGE.

Deuxièmement, pourquoi avez-vous besoin d'une deuxième boucle ? Et pourquoi avez-vous ajouté des chèques supplémentaires au mien ?


JE L'AVAIS AU MÊME ENDROIT (À L'INTÉRIEUR DU DÉPART), MAIS JE NE VEUX PAS SUPPRIMER LES ORDRES EN ATTENTE ET TOUT LE RESTE EST IDENTIQUE (NON MIS À ZÉRO).
 
sllawa3:

COMME VOUS POUVEZ LE VOIR ET LÀ (À L'INTÉRIEUR DU DÉBUT) ALORS LES ORDRES EN ATTENTE NE SONT TOUT SIMPLEMENT PAS SUPPRIMÉS, MAIS TOUT LE RESTE EST LE MÊME (PAS DE RÉINITIALISATION)
.

Réfléchissons logiquement, ces 4 variables sont remises à zéro à chaque tick, non ?

deuxième question, s'il n'y a pas de commandes, alors rien n'est affecté à ces variables et elles restent à zéro, n'est-ce pas ?

et la dernière question, si elles sont égales à zéro, comment peuvent-elles ne pas être mises à zéro ?

 
ET SUPPRIMÉ LA MODIFICATION (AINSI QUE LE SECOND CYCLE)... LA MÊME CHOSE
 
Techno:

Réfléchissons logiquement, ces 4 variables sont remises à zéro à chaque tick, non ?

deuxième question, s'il n'y a pas de commandes, alors rien n'est affecté à ces variables et elles restent à zéro, n'est-ce pas ?

et la dernière question, s'ils sont nuls, comment peuvent-ils ne pas être remis à zéro ?


EH BIEN, ESSAYEZ-LE ET VOYEZ PAR VOUS-MÊME... JE PENSAIS LA MÊME CHOSE...
 

On ne range pas les choses au hasard, il faut réfléchir. Vous savez tout, vous pensez tout, mais le résultat est absurde.

Il suffit d'écrire une boucle où chaque commande aura un ticket et une place, mais n'écrivez rien d'autre. Vous devriez mettre le code ici