HILFE, WER KANN!!! - Seite 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);
  }
  
  //+------------------------------------------------------------------+
}

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

 
ES IST UNWAHRSCHEINLICH, DASS DIE OPTIONEN MIT EINER DER VORGESCHLAGENEN OPTIONEN FUNKTIONIEREN, UND WIE ICH BEREITS GESCHRIEBEN HABE, IST ES UNWAHRSCHEINLICH, DASS SIE FUNKTIONIEREN...
 

Zunächst einmal habe ich gesagt, dass Variablen innerhalb der START FUNCTION deklariert werden sollen.

Zweitens: Warum brauchen Sie eine zweite Schleife? Und warum haben Sie bei mir zusätzliche Kontrollen durchgeführt?

 
Wenn Sie die Aufträge durchgehen und ihren Typ speichern, speichern Sie ihr Ticket und ihre Stopps, damit Sie nicht 10 Iterationen durchlaufen müssen.
 
Techno:
Sein Code ist völlig durcheinander, dieselben Überprüfungen in der Schleife werden 10 Mal wiederholt, es gibt eine Menge Fehler, sogar die Änderungsfunktion hat eine Magie anstelle einer Verzögerungszeit... das ist alles Blödsinn, und es ist unsere Schuld, weil wir es nicht gut erklärt haben...

ES IST KEINE SCHLECHTE ERKLÄRUNG, ES IST DIE FALSCHE ERKLÄRUNG, DU VERLIERST AUF UNTERSCHIEDLICHE WEISE, WAS ICH ANFANGS HATTE UND MIT DEM GLEICHEN FEHLER
 
Techno:

Zunächst einmal habe ich gesagt, dass man Variablen innerhalb der START FUNCTION deklarieren soll, und hier haben wir wieder 25.

Zweitens: Warum brauchen Sie eine zweite Schleife? Und warum haben Sie bei mir zusätzliche Kontrollen durchgeführt?


ICH HATTE ES AN DER GLEICHEN STELLE (INNERHALB DES STARTS), ABER ICH MÖCHTE DIE AUSSTEHENDEN AUFTRÄGE NICHT ENTFERNEN UND ALLES ANDERE IST GLEICH (NICHT AUF NULL GESETZT)
 
sllawa3:

WIE SIE SEHEN KÖNNEN UND DORT (INNERHALB DES STARTS) DANN DIE AUSSTEHENDEN AUFTRÄGE SIND NUR NICHT GELÖSCHT, ABER ALLES ANDERE IST DAS GLEICHE (NICHT ZURÜCKGESETZT)

Denken wir logisch: Diese 4 Variablen werden bei jedem Tick zurückgesetzt, richtig?

Zweite Frage: Wenn es keine Aufträge gibt, dann wird diesen Variablen nichts zugewiesen und sie bleiben Null, richtig?

und die letzte Frage: Wenn sie gleich Null sind, wie können sie dann nicht auf Null gesetzt werden?

 
UND DIE ÄNDERUNG GANZ ENTFERNT (ZUSAMMEN MIT DEM ZWEITEN ZYKLUS)... DIE GLEICHE SACHE
 
Techno:

Denken wir logisch, diese 4 Variablen werden bei jedem Tick zurückgesetzt, richtig?

Zweite Frage: Wenn es keine Aufträge gibt, dann wird diesen Variablen nichts zugewiesen und sie bleiben Null, richtig?

und die letzte Frage: Wenn sie gleich Null sind, wie können sie dann nicht auf Null gesetzt werden?


PROBIEREN SIE ES AUS UND ÜBERZEUGEN SIE SICH SELBST... ICH HABE DAS GLEICHE GEDACHT...
 

Man räumt nicht wahllos Dinge ein und aus, man muss nachdenken. Man weiß alles, man denkt alles, aber das Ergebnis ist absurd.

Schreiben Sie einfach eine Schleife, in der jede Bestellung ein Ticket und einen Platz erhält, aber schreiben Sie nichts weiter. Sie sollten den Code hier einfügen