Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 559

 
akarustam:

Ecco le meraviglie del test di un programma EA in MT5 (vedi foto-file)... Un EA può essere positivo con un saldo negativo ? e quando il saldo è negativo ? Prima di passare a Trading Nation, ho cambiato spesso idea e non l'ho mai fatto... Penso che sia ora di dormire un po')

Se qualcuno è interessato al codice aperto e al set me lo faccia sapere? - Lo pubblicherò certamente. Ho iniziato a padroneggiare MT5 con l'hedging e ora, - miracoli, però)

Nessun miracolo. Ho una posizione aperta con un grande surplus e una posizione chiusa con una perdita che supera il mio saldo. Non sto perdendo perché ho abbastanza fondi per mantenere una posizione aperta.
 
Artyom Trishkin:
Non ci sono miracoli. Ci sono posizioni aperte con una grande eccedenza, e c'è una posizione chiusa con una perdita maggiore della dimensione del bilancio. Non c'è nessuna controindicazione perché ci sono abbastanza fondi per mantenere le posizioni aperte.
È così semplice... GRAZIE!
 

Potete per favore dirmi qual è il mio errore.

for(int i=0;i<N_Sell;i++) printf("OpenSellTime[%d] = %G",i,TimeToString(OpenSellTime[i],TIME_DATE|TIME_MINUTES)," PriceOpenSell[%d] = %G",i,PriceOpenSell[i]);

La data dall'array OpenSellTime non viene stampata e non la seconda parte dell'espressione - PriceOpenSell.

E non riesco a trovare i comandiprintf come%G e%d.

 

Buon pomeriggio a tutti).

Questa è una domanda per un manichino della programmazione...

Sto cercando di compilare un EA per una nuova build. Il compilatore mi dà un sacco di errori diversi...

Qui c'è uno di loro

if(oppositedelete){delete( OP_SELLSTOP);delete( OP_SELLLIMIT);}

Ci sono 2 errori segnati in rosso in questo frammento di codice:'(' - puntatore a oggetto atteso

Avendo letto un po' sull'argomento dell'errore, ho capito che il nome è riservato e devo sostituirlo...

Quindi la domanda è: con cosa sostituirlo?

 
Anton Razmyslov:

Buon pomeriggio a tutti).

Questa è una domanda per un manichino della programmazione...

Sto cercando di compilare un EA per una nuova build. Il compilatore mi dà un sacco di errori diversi...

Qui c'è uno di loro

if(oppositedelete){delete( OP_SELLSTOP);delete( OP_SELLLIMIT);}

Ci sono 2 errori segnati in rosso in questo frammento di codice:'(' - puntatore a oggetto atteso

Avendo letto un po' sull'argomento dell'errore, ho capito che il nome è riservato e devo sostituirlo...

Quindi la domanda è: con cosa sostituirlo?

A tutto quello che ti viene in mente. Per esempio _delete o delete_1294_765_1912 o solo Napoleone
 

C'è questa linea nel codice

Print (";OpenSellTime - ",TimeToString(OpenSellTime[N_Sell],TIME_DATE|TIME_MINUTES), ";PriceOpenSell", PriceOpenSell[N_Sell]);

Perché ottengo questo testo nell'output:

OpenSellTime - 2015.12.01 11:15

dove ";" e la seconda parte è"PriceOpenSell"?

 
-Aleks-:

C'è questa linea nel codice

Print (";OpenSellTime - ",TimeToString(OpenSellTime[N_Sell],TIME_DATE|TIME_MINUTES), ";PriceOpenSell", PriceOpenSell[N_Sell]);

Perché ottengo questo testo nell'output:

OpenSellTime - 2015.12.01 11:15

dov'è il ";" e la seconda parte"PriceOpenSell"?

rimosso ";" - lavorato.

La domanda sulla printf rimane...

 

Come faccio a inviare correttamente una richiesta di chiusura di una posizione del contatore?

Se chiudo come prima, quello opposto, viene laccato ))

Già provato tutto, dà ancora errore 2016.04.15 13:17:24 Core 1 2016.03.29 09:00:00 failed close position #64 buy 0.81 EURUSD by position #0 [Invalid request]

Quali campi riempire e quali no? Credo che non abbia importanza se la posizione aperta è corta o lunga.

//+------------------------------------------------------------------+
//| Закрытие  позиции по типу                                        |
//+------------------------------------------------------------------+
void PositionClose(double lot, int P_type,long id)
  {
Print("Вход в функцию Закрытие  позиции по типу !");
    ZeroMemory(mrequest); ZeroMemory(mresult);            // обнуляем значения mrequest, mresult

   //--- Получить текущее значение котировки в структуру типа MqlTick
   if(!SymbolInfoTick(_Symbol,latest_price))
     {
      Alert("Ошибка получения последних котировок - ошибка:",GetLastError(),"!!");
      return;
     }            
//--- формируем торговый запрос
      mrequest.action = TRADE_ACTION_CLOSE_BY;                                              // закрыть позицию встречной
      mrequest.order = id; 
//      mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
//      mrequest.price =  NormalizeDouble(latest_price.bid,_Digits);                      // последняя цена ask
//    mrequest.sl = 0;               // Stop Loss
//     mrequest.tp = 0;               // Take Profit
      mrequest.symbol = _Symbol;                        // символ
      mrequest.volume = lot;                            // количество лотов для торговли
 //     mrequest.magic = MAGIC;                               // Magic Number
      
//     if (P_type == 0) mrequest.type = ORDER_TYPE_SELL; // проверяем тип позиции
//     if (P_type == 1) mrequest.type = ORDER_TYPE_BUY;     
      mrequest.type = ORDER_TYPE_CLOSE_BY;
      mrequest.type_filling = ORDER_FILLING_FOK;        // тип исполнения ордера - все или ничего
      mrequest.deviation=10;                            // проскальзывание от текущей цены
                                        
            if( OrderSend(mrequest,mresult)>0)            // если значение отосланного ордера не ноль, то 
                  {  if(mresult.retcode==10009 || mresult.retcode==10008)
                     Print(" позиция  закрыта !");
                  } else {
                     Print(ResultRetcodeDescription(mresult.retcode));
                     return;
                         }
  }
 

Ciao, domanda sul tester.

Sto testando un Expert Advisor multivaluta e vorrei vedere nel visualizzatore tutte le finestre su tutte le coppie di valute che vengono scambiate.

Nell'aiuto del visualizzatore si parla di un comando "Chart" nella sezione "View" del menu principale del visualizzatore, che sembra essere usato per aprire nuovi grafici. Ma per qualche motivo non ho affatto il comando "Chart" e, di conseguenza, non posso aprire i grafici di altre coppie. Qual è il problema qui?

 
Aleksandr Prishenko:

Come faccio a inviare correttamente una richiesta di chiusura di una posizione del contatore?

Se chiudo come prima, quello opposto, viene laccato ))

Già provato tutto, dà ancora errore 2016.04.15 13:17:24 Core 1 2016.03.29 09:00:00 failed close position #64 buy 0.81 EURUSD by position #0 [Invalid request]

Quali campi riempire e quali no? Per quanto ho capito, non importa se la posizione è lunga o corta.

Usare codice minimo - usare la libreria standard:

//+------------------------------------------------------------------+
//|                                                       TestEA.mq5 |
//|                              Copyright © 2016, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"

#include <Trade\Trade.mqh>

CTrade my_trade;
ulong    result_deal_0  =0;
ulong    result_deal_1  =0;
bool     first_start    =false;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   first_start=false;
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(!first_start)
     {
      my_trade.Sell(0.01);
      result_deal_0=my_trade.ResultDeal();
      Sleep(1000);

      my_trade.Buy(0.02);
      result_deal_1=my_trade.ResultDeal();
      Sleep(1000);

      if(result_deal_0!=0 && result_deal_1!=0)
         PositionCloseBy(result_deal_0,result_deal_1);

      first_start=true;
     }
  }
//+------------------------------------------------------------------+
//| Position Close By                                                |
//+------------------------------------------------------------------+
void PositionCloseBy(ulong ticket,ulong ticket_by)
  {
   my_trade.PositionCloseBy(result_deal_0,result_deal_1);
  }
//+------------------------------------------------------------------+

Diario dell'agente:

ES      0       09:12:21.189    Trade   2016.04.14 00:00:30   instant sell 0.01 EURUSD at 1.12728 (1.12728 / 1.12736 / 1.12728)
IL      0       09:12:21.189    Trades  2016.04.14 00:00:30   deal #2  sell 0.01 EURUSD at 1.12728 done (based on order #2)
 OP      0       09:12:21.189    Trade   2016.04.14 00:00:30   deal performed [#2  sell 0.01 EURUSD at 1.12728]
NF      0       09:12:21.189    Trade   2016.04.14 00:00:30   order performed sell 0.01 at 1.12728 [#2  sell 0.01 EURUSD at 1.12728]
GJ      0       09:12:21.192    TestEA (EURUSD,H1)      2016.04.14 00:00:30   CTrade::OrderSend: instant sell 0.01 EURUSD at 1.12728 [done at 1.12728]
KH      0       09:12:21.192    Trade   2016.04.14 00:00:31   instant buy 0.02 EURUSD at 1.12736 (1.12728 / 1.12736 / 1.12728)
OD      0       09:12:21.192    Trades  2016.04.14 00:00:31   deal #3  buy 0.02 EURUSD at 1.12736 done (based on order #3)
 GI      0       09:12:21.193    Trade   2016.04.14 00:00:31   deal performed [#3  buy 0.02 EURUSD at 1.12736]
LM      0       09:12:21.193    Trade   2016.04.14 00:00:31   order performed buy 0.02 at 1.12736 [#3  buy 0.02 EURUSD at 1.12736]
NS      0       09:12:21.193    TestEA (EURUSD,H1)      2016.04.14 00:00:31   CTrade::OrderSend: instant buy 0.02 EURUSD at 1.12736 [done at 1.12736]
OP      0       09:12:21.193    TestEA (EURUSD,H1)      2016.04.14 00:00:32   Вход в функцию Закрытие  позиции по типу !
GI      0       09:12:21.193    Trade   2016.04.14 00:00:32   close position #2  sell 0.01 EURUSD by position #3  buy 0.02 EURUSD (1.12728 / 1.12736 / 1.12728)
OM      0       09:12:21.193    Trades  2016.04.14 00:00:32   deal #4  buy 0.01 EURUSD at 1.12736 done (based on order #4)
 RK      0       09:12:21.193    Trades  2016.04.14 00:00:32   deal #5  sell 0.01 EURUSD at 1.12728 done (based on order #4)
 EF      0       09:12:21.193    TestEA (EURUSD,H1)      2016.04.14 00:00:32   CTrade::OrderSend: unknown action 10 [done]
EI      0       09:12:21.423    Trade   2016.04.14 23:59:59   position closed due end of test at 1.12663 [#3  buy 0.01 EURUSD 1.12736]
JG      0       09:12:21.423    Trades  2016.04.14 23:59:59   deal #6  sell 0.01 EURUSD at 1.12663 done (based on order #5)
 HN      0       09:12:21.423    Trade   2016.04.14 23:59:59   deal performed [#6  sell 0.01 EURUSD at 1.12663]
IS      0       09:12:21.423    Trade   2016.04.14 23:59:59   order performed sell 0.01 at 1.12663 [#5  sell 0.01 EURUSD at 1.12663]
Motivazione: