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

 
granit77:
Spostato:

qaz2005 11.10.2011 09:30
Buon pomeriggio a tutti! Per favore consigliatemi, c'è un indicatore personalizzato, ha due oggetti. I loro valori posso scoprirli, ma qui non c'è modo di distinguerli, che sia la linea superiore o inferiore. Non posso sapere il numero e l'ordine dei buffer, quando si installa non ci sono impostazioni. Su Internet ho letto che le impostazioni per il colore vanno anche come buffer, come fare riferimento a loro attraverso la funzione iCustom () o forse qualsiasi altra funzione per risolvere questo punto?

Grazie in anticipo!

P.S. Esiste una letteratura sul linguaggio MQL4? Ho già scaricato e quasi finito un tutorial su MQL4.

I numeri dei buffer sono contati a partire da "0",

iCustom(NULL, 0, "ind",150, 0,2);

dove 150 è il periodo,

0 è il buffer,

2 è una barra.

https://docs.mql4.com/ru/indicators/iCustom

ad esempio

#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red

quindi molto probabilmente blu = 0 buffer

e rosso = 1

 
skyjet:
Alexander, grazie per aver condiviso la tua esperienza! Ma lungo la strada ho una domanda: come si fa l'enumerazione delle valute? O è il nome della valuta nel f-i di OrderSend() al posto di Symbol()? E potresti spiegare come inserire il tuo esempio nel codice? Grazie ancora per il vostro aiuto! :)

Roman, in pratica ha spiegato.

Ovunque dove Symbol() è specificato in Expert Advisor, metti per esempio: SymbolMax[nnnn]. In OrderSend(), appare così

tick=OrderSend(SymbolMax[nnnn],OP_BUYSTOP,L,ur,0,sl,tp,CMM,MAGIC[I],0,Red);

L'ho scritto nel mio Expert Advisor, e lì si impostano i propri valori. È possibile impostare l'elenco delle valute, per esempio:

stringa SymbolMax[4] = {"EURUSD", "GBPUSD", "USDCHF", "USDJPY"};

Forse, qualcuno l'ha implementato in un altro modo, ma questo è il mio lookup di valuta - vedi il codice qui sotto. Ho messo inizio all'inizio della funzione. Inoltre ho fatto un ritardo di 5 secondi per evitare che i messaggi saltino.

if(nnnn<24) nnnn+=1; else nnnn=0;
 


Ho un problema con una modifica in loop,

la modifica è rappresentata come una funzione definita dall'utente
La cosa più interessante è che la funzione standard trawl funziona con entrambe queste funzioni e posso farlo da solo ok, ma quando uso una modifica frattale con breakeven, ottengo modifiche infinite con fractal e breakeven

Mi sono basato sulla modifica di https://book.mql4.com/ru/trading/ordermodify

Ho l'impressione che il criterio per modificare il Breakeven non sia impostato correttamente, come posso sistemarlo per evitare il looping?




//ф-я модификации ордеров безубыток

int mod_b()
{
//--------------------------------------------------------------- 2 --
for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:
int Tip=OrderType(); // Тип ордера
if(OrderSymbol()!=Symb||Tip>1)continue;// Не наш ордер
double SL=OrderStopLoss(); // SL выбранного орд.
double TP =OrderTakeProfit(); // TP выбранного орд.
double Price =OrderOpenPrice(); // Цена выбранн. орд.
int Ticket=OrderTicket(); // Номер выбранн. орд.
//------------------------------------------------------ 3 --
while(true) // Цикл модификации
{
double TS=Tral_Stop; // Исходное значение
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);//Миним. дист&&((SL<TS && Tip==0)||(SL>TS && Tip==1))
if (TS < Min_Dist) // Если меньше допуст.
TS=Min_Dist; // Новое значение TS
//--------------------------------------------------- 4 --
bool Modify=false; // Не назначен к модифи
switch(Tip) // По типу ордера
{
case 0 : // Ордер Buy
if (NormalizeDouble(SL,Digits)< // Если ниже желаем.
NormalizeDouble(Bid-TS*Point,Digits))
{
SL=Price+18*Point; // то модифицируем его
string Text="Buy "; // Текст для Buy
Modify=true; // Назначен к модифи.
}
break; // Выход из switch
case 1 : // Ордер Sell
if (NormalizeDouble(SL,Digits)> // Если выше желаем.
NormalizeDouble(Ask+TS*Point,Digits)
|| NormalizeDouble(SL,Digits)==0)//или равно нулю
{
SL=Price-18*Point; // то модифицируем его
Text="Sell "; // Текст для Sell
Modify=true; // Назначен к модифи.
}
} // Конец switch
if (Modify==false) // Если его не модифи
break; // Выход из while
//--------------------------------------------------- 5 --

Alert ("Модификация ",Text,Ticket,". Ждём ответ..");
bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Модифи его!
//--------------------------------------------------- 6 --
if (Ans==true) // Получилось :)
{
Alert ("Ордер ",Text,Ticket," модифицирован:)");
break; // Из цикла модифи.
}

int mod_f()
{
//--------------------------------------------------------------- 2 --
for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:
int Tip=OrderType(); // Тип ордера
if(OrderSymbol()!=Symb||Tip>1)continue;// Не наш ордер
double SL=OrderStopLoss(); // SL выбранного орд.

//------------------------------------------------------обсчет фрактала

int f = 3; //номер бара с которого идет проверка наличия фрагтала
int DnN = 0, UpN = 0; //порядковый номер присвоен к направлению(upper, lower)
double UpFr = 0, DnFr = 0; //числовое значение фрагтала выраженное в еденице валюты присвоен к направлению(upper, lower)
while (f < Bars && (UpFr == 0 || DnFr == 0))
{
if (iFractals(Symbol(), 0, MODE_UPPER, f) != 0)
if (UpFr == 0)
{
UpFr = iFractals(Symbol(), 0, MODE_UPPER, f);//фрактальная отложка вверх(buy)
UpN = f;
}
if (iFractals(Symbol(), 0, MODE_LOWER, f) != 0)
if (DnFr == 0)
{
DnFr = iFractals(Symbol(), 0, MODE_LOWER, f);//фрактальная отложка вниз(sell)
DnN = f;
}
f++;
}
//------------------------------------------------------ 3 --
while(true) // Цикл модификации
{
double UD;
double TS=UD; // Исходное значение
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);//Миним. дист
if(Tip==0)
UD=DnFr;
if(Tip==1)
UD=UpFr;
if (TS < Min_Dist) // Если меньше допуст.
TS=Min_Dist; // Новое значение TS
//--------------------------------------------------- 4 --
bool Modify=false; // Не назначен к модифи
switch(Tip) // По типу ордера
{
case 0 : // Ордер Buy
if (NormalizeDouble(SL,Digits)< // Если ниже желаем.
NormalizeDouble(UD,Digits))
{
SL=UD; // то модифицируем его
string Text="Buy "; // Текст для Buy
Modify=true; // Назначен к модифи.
}
break; // Выход из switch
case 1 : // Ордер Sell
if (NormalizeDouble(SL,Digits)> // Если выше желаем.
NormalizeDouble(UD,Digits)
|| NormalizeDouble(SL,Digits)==0)//или равно нулю
{
SL=UD; // то модифицируем его
Text="Sell "; // Текст для Sell
Modify=true; // Назначен к модифи.
}
} // Конец switch
if (Modify==false) // Если его не модифи
break; // Выход из while
//--------------------------------------------------- 5 --
double TP =OrderTakeProfit(); // TP выбранного орд.
double Price =OrderOpenPrice(); // Цена выбранн. орд.
int Ticket=OrderTicket(); // Номер выбранн. орд.

Alert ("Модификация ",Text,Ticket,". Ждём ответ..");
bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Модифи его!
//--------------------------------------------------- 6 --
if (Ans==true) // Получилось :)
{
Alert ("Ордер ",Text,Ticket," модифицирован:)");
break; // Из цикла модифи.
}
 

Ciao Cari utenti del forum.

Come posso richiedere preventivi di altri tempi? Ho un modello su D e il mio indicatore ha bisogno di quotazioni LOW, HIGH, OPEN, CLOSE da timeframes più piccoli (M30, H1, H4 per esempio).

 
Slava2007:

Ciao Cari utenti del forum.

Come posso richiedere preventivi di altri tempi? Ho un modello su D e il mio indicatore ha bisogno di quotazioni LOW, HIGH, OPEN, CLOSE da timeframes più piccoli (M30, H1, H4 per esempio).

https://docs.mql4.com/ru/series
 

Buona sera a tutti. ditemi qual è l'errore qui. ecco un pezzo di codice.

//+------------------------------------------------------------------+
//| Funzione di avvio |
//+------------------------------------------------------------------+
void start()
{
//---- controllare lo storico e il trading
if(Bars<100 || IsTradeAllowed()==false) return;
//---- calcolare gli ordini aperti per simbolo corrente
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else CheckForClose();

if (!IfTrueThenCountBarWork) return (0);
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES)
if (OrderMagicNumber() == 700000) <---- IN QUESTA LINEA È ERRORE!!!
CloseAfterSomeBar (CountBar, OrderTicket());
}

}

 
isaev-av:

Buona sera a tutti. per favore consigliatemi qual è l'errore qui. ecco un pezzo di codice.

//+------------------------------------------------------------------+
//| Iniziare la funzione |
//+------------------------------------------------------------------+
void start()
{
//---- controllare la storia e il commercio
if(Bars<100 || IsTradeAllowed()==false) return;
//---- calcolare gli ordini aperti in base al simbolo corrente
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else CheckForClose();

if (!IfTrueThenCountBarWork) return (0);
per (int i = OrdiniTotali() - 1; i >= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES)
if (OrderMagicNumber() == 700000) <---- IN QUESTA CORSA PARLA DI ERRORE!!!
CloseAfterSomeBar (CountBar, OrderTicket())
}

}

Manca il carattere ";".
 

PapaYozh:
Пропущен символ ";"

grazie!!! Non l'ho notato all'inizio.)))


 

Un'altra domanda agli esperti. come inserire correttamente la condizione di apertura: Close[2]<Close[3] di n per cento per vendere. per comprare il contrario naturalmente. e n può essere ottimizzato? grazie in anticipo!

void CheckForOpen()
{
double ma;
int res;
//---- andare a fare trading solo per i primi tik della nuova barra
if(Volume[0]>1) return;
//---- ottenere la media mobile
ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0)
//---- condizioni di vendita
if(Open[1]>ma && Close[1]<ma)
{
res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,",MAGICMA,0,Red);
return;
}
//---- condizioni di acquisto
if(Open[1]<ma && Close[1]>ma)
{
res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,",MAGICMA,0,Blue);
return;
}

 

Dimmi dove ho sbagliato plz... o se è MT4 stesso, ma i miei ordini di acquisto si aprono solo sulla barra High, e gli ordini di vendita solo sulla barra Close =) Anche se non ho nemmeno stipulato queste condizioni nel codice dell'Expert Advisor =)

 extern int TP = 200; 
     extern int TS = 50; 
     extern int TF = 1; 
     extern double lots = 0.1; 
     extern int Pips = 15; 
     extern int MaxPips = 100; 


     int slip = 3; 
     int Magic = 2; 
     int cnt,ticket,total; 

 //+------------------------------------------------------------------+ 
  //| expert initialization function | 
  //+------------------------------------------------------------------+ 
  int init() 
    { 
  //---- 

 //---- 
     return(0); 
    } 
  //+------------------------------------------------------------------+ 
  //| expert deinitialization function | 
  //+------------------------------------------------------------------+ 
  int deinit() 
    { 
  //---- 

 //---- 
     return(0); 
    } 
  //+------------------------------------------------------------------+ 
  //| expert start function | 
  //+------------------------------------------------------------------+ 

 int start() 
    { 
  //---- 

 static double PriceOld = 0.0; 
 double PriceNow; 
 PriceNow = NormalizeDouble(Bid,6); 

 total = OrdersTotal(); 
 if(total < 1) 
 { 
    if((PriceNow-PriceOld)>=Pips*Point && (PriceNow-PriceOld)<MaxPips*Point) 
    { 
           ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,0,0,Magic,0,Green); 
           if(ticket>0) 
               { 
                  OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES); 
                  Print("Ордер на покупку успешно открыт по цене:" ,OrderOpenPrice()); 
               } 
               else 
               { 
                  Print("Ордер не открыт по причине:" ,GetLastError()); 
                  return(0); 
               } 
     } 

 if((PriceNow-PriceOld)<=(-Pips)*Point && (PriceNow-PriceOld)>(-MaxPips)*Point) 
     { 
           ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,slip,Ask+TS*Point,0,0,Magic,0,Red); 
           if(ticket>0) 
               { 
                  OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES); 
                  Print("Ордер на покупку успешно открыт по цене:" ,OrderOpenPrice()); 
               } 
               else 
               { 
                  Print("Ордер не открыт по причине:" ,GetLastError()); 
                  return(0); 
               } 
     } 
 } 
return(0);
}