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

 
cyclik33:


Ti ho detto perché il codice non funziona correttamente - l'hai messo nel posto sbagliato... :) Penso che se svitate le ruote e le mettete nel bagagliaio, non andrete lontano, anche se le ruote sono lì e le porte si chiudono... :)
 
T-G:

La domanda può essere banale, l'Expert Advisor sta facendo trading su M1, è arrivato il segnale per aprire un ordine, supponiamo che lo stop sia corto e che l'ordine si sia chiuso sullo sl. ma la condizione per aprire esiste ancora.

Qual è il modo migliore per assicurarsi che l'ordine non venga aperto di nuovo nello stesso minuto?

Controllare l'apertura di una nuova candela. Se è nuovo, si apre, se è vecchio, non si apre...
 
ToLik_SRGV:

Il conteggio dei numeri in OrderSelect() parte da zero. E tu hai 1, il che significa che stai cercando un secondo ordine, anche se ne hai solo uno sul mercato, per questo non funziona.

Grazie, l'avevo dimenticato.
 
ToLik_SRGV:

Boris, una piccola correzione nel codice, ho dimenticato di aggiungere il ripristino della posizione dell'array, quando si ritorna al lotto originale:


Non sono sicuro di averla messa nel posto giusto. Dopo una perdita può aprire il lotto iniziale, se anche questo è in perdita, può aprire di nuovo il lotto iniziale.

E a volte dopo la prima perdita ci vuole 0,4.

Devo aver messo qualcosa nel posto sbagliato?

 
cyclik33:


Ho un modo molto strano di lavorare con questo codice. Dopo averne perso uno può aprire il primo lotto e se questo perde di nuovo, può aprire il primo lotto.
E a volte dopo la prima perdita prende 0,4.
Devo aver messo qualcosa nel posto sbagliato?

Boris, una piccola correzione nel codice, ho dimenticato di aggiungere il reset della posizione dell'array, quando si ritorna al lotto originale:

//+------------------------------------------------------------------+
double getMartinLot(double lot, double arrayLot[]){//ФУНКЦИЯ УПРАВЛЕНИЯ ОБъЕМОМ ТОРГОВ ПО СИСТЕМЕ МАРТИНГЕЙЛА
   static double balance_before, balance_after;    //ДЛЯ ХРАНЕНИЯ СОСТОЯНИЯ БАЛАНСА ДО И ПОСЛЕ СДЕЛОК
   static double save_Lot;   
   static int loop;
   if(loop == ArraySize(arrayLot))loop = 0;   
   balance_after = AccountBalance();               //СОХРАНЕНИЕ ТЕКУЩЕГО СОСТОЯНИЯ БАЛАНСА   
   if(balance_after >= balance_before){            //ПРОВЕРКА ИЗМЕНЕНИЯ БАЛАНСА
      save_Lot = lot;                              //ЕСЛИ ОН НЕ ИЗМЕНИЛСЯ ИЛИ СТАЛ БОЛЬШЕ, ТО СБРАСЫВАЕМ ЛОТ ДО БАЗОВОГО
      loop = 0;
   }else{
      save_Lot = arrayLot[loop];                   //ЕСЛИ СТАЛ МЕНЬШЕ ТО УВЕЛИЧИВАЕМ ЛОТ
      loop++;
   }
   balance_before = balance_after;                 //СОХРАНЯЕМ СОСТОЯНИЕ БАЛАНСА ПОСЛЕ РАБОТЫ
   return(save_Lot);
}
//+------------------------------------------------------------------+
 
artmedia70:
Ti ho detto perché non funziona correttamente - l'hai messo nel posto sbagliato... :) Penso che se svitate le ruote e lo mettete nel bagagliaio, non andrete lontano, anche se sembra che le ruote siano lì e le porte si chiudano... :)


Sono assolutamente d'accordo con te. Ma non sto criticando il tuo codice, ho solo detto che ho avuto un problema con esso), a proposito, ho di nuovo un problema con esso, se non ti dispiace - dimmi cosa c'è di sbagliato, mi piacerebbe davvero capire cosa sto facendo male.

extern colorOpenBuy = Blue;
extern colorCloseBuy = Aqua;
extern colorOpenSell = Red;
extern colorCloseSell = Aqua;


void deinit() {
Comment(");
}

double Lots_New = Lot;


//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+

int start(){
if (lFlagUseHourTrade){
if (!(Hour()>=nFromHourTrade && Hour()<=nToHourTrade)) {
Comment("Il tempo del commercio non è ancora arrivato!");
return(0);

L'ho incollato qui, come hai detto tu, prima della funzione Start, ma alla compilazione dice 'Lot' - initialization expected D:\MetaTrader\experts\Prostoj_2.mq4 (39, 20)

Per favore, ditemi cosa può essere.

 
artmedia70:
Controllare l'apertura di una nuova candela. Se nuovo, si apre, se vecchio, no...
qual è il modo migliore per farlo?
 
cyclik33:


Sono assolutamente d'accordo con te. Ma non sto criticando il tuo codice, sto solo dicendo che ho alcuni problemi con esso. A proposito, ho un altro problema con esso, se non ti dispiace - dimmi cosa c'è di sbagliato, mi piacerebbe davvero sapere cosa sto facendo male.

extern colorOpenBuy = Blue;
extern colorCloseBuy = Aqua;
extern colorOpenSell = Red;
colore esterno colorCloseSell = Aqua;


void deinit() {
Commento(");
}

doppio Lotti_Nuovo = Lotto;


//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+

int start(){
se (lFlagUseHourTrade){
if (!(Hour()>=nFromHourTrade && Hour()<=nToHourTrade)) {
Comment("Il tempo del commercio non è ancora arrivato!");
ritorno(0);

L'ho inserito qui, come hai detto tu, prima della funzione Start, ma quando si compila dice 'Lot' - initialization expected D:\MetaTrader\experts\Prostoj_2.mq4 (39, 20)

Per favore, ditemi cosa può essere.

Dove viene inizializzato Lot nel vostro codice?

extern color colorOpenBuy = Blue;
extern color colorCloseBuy = Aqua;
extern color colorOpenSell = Red;
extern color colorCloseSell = Aqua;
extern double Lot = 0.1;
double Lots_New;

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

//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+

int start(){
if (lFlagUseHourTrade){
if (!(Hour()>=nFromHourTrade && Hour()<=nToHourTrade)) {
Comment("Time for trade has not come else!");
return(0);

Poi, solo dopo aver controllato l'alce, cambiate Lots_New come scritto prima, o assegnategli il valore = Lot;

 

Già... Sto avendo difficoltà con gli array... Cercando di riempire un array con i dati dell'induttore, la piccola funzione è un buco nell'acqua... Puoi dirmi cosa sto sbagliando?

double      TempIND[50]; 
void   SaveDataIND(double TempIND[], int nBars)
{
   ArrayResize(TempIND,nBars);
   for (int j=0; j<=nBars-1; j++)
      {
         TempIND[j]=iAD(NULL,PERIOD_M5,j);       // ЗДЕСЬ ОШИБКА array item cannot be assigned
         Print("TempIND[",j,"] = ",TempIND[j]);
      }

}

Io lo chiamo così:

SaveDataIND(TempIND, 20);
Dov'è il problema?
 
artmedia70:

Già... Sto avendo difficoltà con gli array... Cercando di riempire un array con i dati dell'induttore, la piccola funzione è un buco nell'acqua... Puoi dirmi cosa sto sbagliando?

Io lo chiamo così:

Dove diavolo è il problema?



il vostro cane nel passare i parametri alla funzione, se passate come SaveDataIND(double TempIND[])

double TempIND[ ] è in effetti un nuovo array per la funzione ma senza il diritto di cambiare i parametri, prova SaveDataIND(double & TempIND[])