[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 22

 

Salve. Help for Dummies: Ho un EA che può piazzare ordini pendenti sul minimo e massimo della candela precedente. Apertura in direzione della candela.

Il bisogno:

- Per cambiare la direzione di apertura, cioè in attesa di acquisto a - in attesa di vendita.

- Fare min e max della candela precedente invece di min e max del giorno precedente

- Lascia tutto il resto com'è, cioè cancella gli ordini, i parametri dei lotti, gli stop-los, il numero magico

Tutte le mie azioni portano all'errore 130 nel tester o non si compila affatto. Grazie per qualsiasi consiglio.

Qui sotto c'è il codice funzionante, senza il mio intervento.

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;

//+------------------------------------------------------------------+
//| funzione di inizializzazione esperta |
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| funzione di deinizializzazione esperta |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| funzione di avvio esperto |
//+------------------------------------------------------------------+
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:

Salve. Aiuta uno scemo a capire questo:

Per caso hai confuso "Qualsiasi domanda da principiante" con " Rifare completamente l'EA"?
 
LazarevDenis:

Capitan Ovvietà... eppure qualcuno mi dia un suggerimento.

Ti darò un suggerimento: metti questa espressione in parole. E vedrai che l'hai messa male.

PS.
Se è così ovvio per voi dove cercare un errore, allora perché chiedere?

 
delf:


Se errore 130. Riconsiderare la fermata e l'asporto.
 
LazarevDenis:

aiuto per favore, l'ordine dovrebbe chiudere a 4 volte la distanza da high a orderopenprice

Dove ho sbagliato?

tutti gli ordini chiudono entro 3 pip dall'apertura


Hai provato a calcolare il risultato della tua formula? Se no, allora fallo, perché sto ricevendo delle stronzate. Forse è perché non conosco tutte le condizioni.
 

Solo un errore - non so come risolverlo. Dov'è il problema?

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

Simbolo - inizializzazione prevista C:\ProgrammiMetaTrader Finam\experts1.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, specifica qualcosa di specifico, come

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

Solo un errore - non so come risolverlo. Dov'è il problema?

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

Simbolo - inizializzazione prevista C:\ProgrammiMetaTrader Finam\experts1.mq4 (8, 13)

Lei ha:

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

È necessario:

string Symb=Symbol();                        // Финанс. инструмент
Infatti, potete fare doppio clic sul messaggio di errore e il cursore andrà alla posizione specificata (a proposito) dove si è verificato l'errore di compilazione, cioè qui: (8, 13)

Dopo di che, verranno lanciati altri errori... :)

Spostare la linea precedente all'inizio della funzione start()

Questo è un inizio - poi occupatevi degli altri errori...

 

Ciao a tutti.

Ragazzi, abbiamo bisogno di aiuto. Descrivere la situazione.

il prezzo attuale è 1,4100 (per esempio) ho bisogno di trovare una barra la cui apertura sarà entro (più o meno 10 pt da 1,4100) da 1,4090 a 1,4110 - questo va bene.

Per esempio il programma ha trovato la barra con l'apertura a 1,4105 che mi corrisponde.

Poi il programma dovrebbe confrontare questa barra con la barra alla sua sinistra e alla sua destra e se è più bassa, sarà adatta.

 

Artem, il trucco qui è che c'è una linea come questa sotto:

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

Quindi il modo che hai suggerito non ha molto senso - se ho capito bene quello che vuole alex12.

Motivazione: