[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 286

 

Salve. Potete dirmi se esiste un EA che segni i punti di entrata e di uscita sul grafico, come nello strategy tester?

 

E manualmente - cosa c'è di male? Tira le compravendite dalla cronologia del conto con il mouse sul grafico e saranno indicate lì!

Oppure usa lo script - http://www.kimiv.ru/index.php?option=com_remository&Itemid=13&func=fileinfo&id=32

 
TheXpert >> :

ShellExecute, comando "open", ad es.


Grazie
 
rid >> :

Dovrebbe essere collocato all'esterno. Non all'interno di qualsiasi funzione - ma come una funzione separata e indipendente.

Si può fare così:


Non sono sicuro che l'EA funzionerà in queste condizioni. Perché la prima posizione non sarà in grado di aprire...

La funzione isCloseLastPosByTake() dovrebbe essere rimossa da una condizione di acquisto o vendita.

Allora funziona.

il codice del consulente con correzioni secondo la raccomandazione di rid solo l'inizio

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
    // Узнаем уровень стопов и спрэд
    int Spread = MarketInfo(Symbol(), MODE_SPREAD);
    int StopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL);

    // Рассчитываем значения средних на 0-ом и 1-ом барах
    double MAF_0 = iMA(NULL, 0, MAFP, 0, 1, 1, 0);
    double MAF_1 = iMA(NULL, 0, MAFP, 0, 1, 1, 1);
    double MAS_0 = iMA(NULL, 0, MASP, 0, 1, 1, 0);
    double MAS_1 = iMA(NULL, 0, MASP, 0, 1, 1, 1);
    
   // открытие позиции Buy покупка
    if( MAF_1 < MAS_1 && MAF_0 > MAS_0)                         {
    if( isCloseLastPosByTake( NULL, OP_SELL, MagicNumber) ==true) {
     if( CheckOrders(OP_SELL))                                      {
       if( StopLoss <= StopLevel+ Spread)
         double SL = 0;        else         SL = Ask - StopLoss*Point;
       if( TakeProfit <= StopLevel- Spread)
         double TP = 0;        else         TP = Ask + TakeProfit*Point;
       if(!OrderSend(Symbol(), OP_BUY, Lots, Ask, 5, SL, TP, NULL, MagicNumber))
         Print("Не открыт ордер Buy. Ошибка №", GetLastError()); 
                }
               }
              }
//-------------------Конец покупки -----------------------
    
  //  ----- Открытие позиции Sell продажа------------  
    if( MAF_1 > MAS_1 && MAF_0 < MAS_0)                         {
    if( CheckOrders(OP_BUY))                                     {
      if( StopLoss <= StopLevel+ Spread)
         SL = 0;        else         SL = Bid + StopLoss*Point;
       if( TakeProfit <= StopLevel- Spread)
         TP = 0;        else         TP = Bid - TakeProfit*Point;
       if(!OrderSend(Symbol(), OP_SELL, Lots, Bid, 5, SL, TP, NULL, MagicNumber))
         Print("Не открыт ордер Sell. Ошибка №", GetLastError()); 
                 }
                }
               }
      //---конец блока продажи ------------------------------
     
//----
   return(0);
  }//+----------КОНЕЦ ФУНКЦИИ СТАРТ -------------------+

//ЖЖЖЖЖЖЖ Другие вызываемые пользовательские функции ЖЖЖЖЖЖ
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия           |
//|  последней позиции по тейку.                                    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   ocp, otp;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if ( sy=="0") sy=Symbol();
  for ( i=0; i< k; i++) {
    if (OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()== sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if ( op<0 || OrderType()== op) {
            if ( mn<0 || OrderMagicNumber()== mn) {
              if ( t<OrderCloseTime()) {
                t=OrderCloseTime();
                j= i;
              }} }}}}}

  if (OrderSelect( j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo( sy, MODE_DIGITS);
    if ( dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    otp=NormalizeDouble(OrderTakeProfit(), dg);
    if ( ocp== otp) return( True);
  }
  return( False);
}
 

Ho avuto un errore quando l'ho compilato.

2;73;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;103:3;'}' - unbalanced parentheses

questo posto è segnato * aiutare la brava gente.....

   return(0);
 * }//+----------КОНЕЦ ФУНКЦИИ СТАРТ -------------------+
 
igrok2008 писал(а) >>

Ho avuto un errore quando l'ho compilato.

questo posto è segnato * aiutare la brava gente.....

Il numero di parentesi graffe è diverso nella funzione iniziale

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start() {
    // Узнаем уровень стопов и спрэд
    int Spread = MarketInfo(Symbol(), MODE_SPREAD);
    int StopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL);

    // Рассчитываем значения средних на 0-ом и 1-ом барах
    double MAF_0 = iMA(NULL, 0, MAFP, 0, 1, 1, 0);
    double MAF_1 = iMA(NULL, 0, MAFP, 0, 1, 1, 1);
    double MAS_0 = iMA(NULL, 0, MASP, 0, 1, 1, 0);
    double MAS_1 = iMA(NULL, 0, MASP, 0, 1, 1, 1);
    
   // открытие позиции Buy покупка
    if( MAF_1 < MAS_1 && MAF_0 > MAS_0)                         {
        if( isCloseLastPosByTake( NULL, OP_SELL, MagicNumber) ==true) {
            if( CheckOrders(OP_SELL))                                      {
                if( StopLoss <= StopLevel+ Spread)   double SL = 0;        else         SL = Ask - StopLoss*Point;
                if( TakeProfit <= StopLevel- Spread) double TP = 0;        else         TP = Ask + TakeProfit*Point;
                if(!OrderSend(Symbol(), OP_BUY, Lots, Ask, 5, SL, TP, NULL, MagicNumber))
                    Print("Не открыт ордер Buy. Ошибка №", GetLastError()); 
            }
        }
    }
    //-------------------Конец покупки -----------------------
    
    //  ----- Открытие позиции Sell продажа------------  
    if( MAF_1 > MAS_1 && MAF_0 < MAS_0)                         {
        if( isCloseLastPosByTake( NULL, OP_BUY, MagicNumber) ==true) {
            if( CheckOrders(OP_BUY))                                     {
               if( StopLoss <= StopLevel+ Spread)             SL = 0;        else         SL = Bid + StopLoss*Point;
               if( TakeProfit <= StopLevel- Spread)           TP = 0;        else         TP = Bid - TakeProfit*Point;
               if(!OrderSend(Symbol(), OP_SELL, Lots, Bid, 5, SL, TP, NULL, MagicNumber))
                   Print("Не открыт ордер Sell. Ошибка №", GetLastError()); 
            }
        }
    }
    //---конец блока продажи ------------------------------
    
    return(0);
}//+----------КОНЕЦ ФУНКЦИИ СТАРТ -------------------+
Deve essere successo qualcosa del genere. Non è entrato nella logica
 
igrok2008 >> :

ecco il codice di Expert Advisor con le correzioni su raccomandazione di rid


Rimuovere la parentesi graffa in più dalla Salesbox. Ti ho detto che il numero di parentesi di apertura deve essere uguale al numero di parentesi di chiusura. E tu hai due staffe aperte e tre chiuse!

E naturalmente ci sarà un errore di compilazione.

 
rid >> :

Rimuovere la parentesi graffa in più dalla Salesbox. Ti ho detto che il numero di parentesi di apertura deve essere uguale al numero di parentesi di chiusura. Ma tu hai due parentesi aperte e tre chiuse!

E naturalmente ci sarà un errore di compilazione.

E le parentesi di apertura sono quello che????


aaaaaaaaahhh, ho capito, è {.........-!!!!!!!!!!!!!!} :-)))))))

Metterò alla prova........ Semmai, non giudicate, cercherò di fare domande.

 
igrok2008 писал(а) >>

E le parentesi di apertura sono quello che????

aaaaaaaaaaaaaaaaand è {.........-!!!!!!!!!!!!!! :-)))))))

Sarò alla prova......... Semmai, non biasimatemi, farò domande.

Pensavo di aver fatto una revisione.

 

Tale correzione non funzionerà. Non sarà in grado di aprire il primo scambio. Perché la condizione per aprire il primissimo trade nella tua variante è di chiudere qualsiasi trade precedente al take o allo stop!

Cioè - un circolo vizioso.

Motivazione: