[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 227

 
drknn:

Aumentare lo slittamento. Gli scambi devono essere stati aperti in un mercato veloce. Succede a volte dopo notizie importanti che l'Eurobucks è così veloce in 1-2 ticks che è un incubo. E mentre il server sta elaborando l'ordine dell'EA il prezzo cambia molto bruscamente.


Ho paura che se lo Slippage è sempre grande, DT potrebbe iniziare ad abusarne su base sistematica. Sarebbe auspicabile "spostarlo" dinamicamente - solo se il prezzo sul server fosse migliore di quello a cui è stato inviato l'ordine. Sarebbe simile all'offerta manuale - se il prezzo richiesto non è più disponibile, allora ne verrà offerto uno nuovo che può essere accettato premendo OK o rifiutato - se è la stessa situazione, naturalmente.

 

Ciao a tutti! Per favore, aiutatemi a combinare le seguenti cose. Il risultato dovrebbe essere: due linee che seguono il prezzo, una più bassa della Ask di 20 pip..,

Inoltre, ricevo un segnale acustico se il prezzo cambia di 20 punti per 1 tick.

Tutto funziona bene separatamente. Grazie in anticipo!

1) La linea sotto l'Ask di 20 pip.

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int start()
{
ObjectCreate("MyPriceLine", OBJ_HLINE, 0, 0, Ask-20*Point) ;
ObjectSet("MyPriceLine", OBJPROP_PRICE1, Ask-20*Point);
return(0);
}

//+------------------------------------------------------------------+

2) La linea è 20 pip sopra l'Ask.

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int start()
{
ObjectCreate("MyPriceLine", OBJ_HLINE, 0, 0, Ask+20*Point) ;
ObjectSet("MyPriceLine", OBJPROP_PRICE1, Ask+20*Point);
return(0);
}

//+------------------------------------------------------------------+

3) Tasso di variazione dei prezzi nel tempo.

#property show_inputs

extern int pips=2; //изменение аск
extern double Time_=0.1; //c. ~ tick
extern bool все_из_обзора_рынка=true; // только текущий символ - false

int i, l, p, количество_символов;
string val[], на_экран;
int Ask_save[];

//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
void start(){
количество_символов=SymbolsList(val, true);//запись в массив val инструменты и их количество вызов функции SymbolsList
ArrayResize(Ask_save,количество_символов);
if(количество_символов == -1){ Alert("Ошибка открытия файла в SymbolsList(string &Symbols[], bool Selected)"); return;}
if(!все_из_обзора_рынка){
количество_символов=1;
ArrayResize(Ask_save,количество_символов);
ArrayResize(val,количество_символов);
val[0]=Symbol();
}

while(true&&!IsStopped()){ //если разрешить и не отанавливать скрипт продолжим

Alert("пересчитаем через "+Time_+" сек.");

for(i=0;i<количество_символов;i++){//посчитаем стоимость спреда для инструментов из обзора рынка
if((Ask_save[i]-MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT))>=pips){
Alert(val[i]+","+Period()+" изменился вниз на "+DoubleToStr((Ask_save[i]-MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT)),0)+" pips");
PlaySound("timeout.wav");
}
if((MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT)-Ask_save[i])>=pips){
Alert(val[i]+","+Period()+" изменился вверх на "+DoubleToStr((MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT)-Ask_save[i]),0)+" pips");
PlaySound("email.wav");
}
Ask_save[i]=MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT);
}
Sleep(Time_*1000);//пауза сек.
}

/*
количество_символов=SymbolsList(val, true);//запись в массив val инструменты и их количество вызов функции SymbolsList
if(количество_символов == -1){ Alert("Ошибка открытия файла в SymbolsList(string &Symbols[], bool Selected)"); return;}

while(true&&!IsStopped()){ //если разрешить и не отанавливать скрипт продолжим
на_экран="\r\n"; //отступ
for(i=0;i<количество_символов;i++)//посчитаем стоимость спреда для инструментов из обзора рынка
на_экран=на_экран+val[i]+" стоимость спреда = " + DoubleToStr(MarketInfo(val[i],MODE_SPREAD)*MarketInfo(val[i],MODE_TICKVALUE),0)+"\r\n";
Comment(на_экран);//выведем на экран
Alert("Пересчитаем");//сигнал
Sleep(3000);//пауза 3 сек.
}
*/
}
void deinit(){Comment("");}
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=


//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
// функция читает из обзора рынка все фин.инстр.
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
int SymbolsList(string &Symbols[], bool Selected){
int Offset, SymbolsNumber; string SymbolsFileName;
if(Selected) SymbolsFileName = "symbols.sel"; else SymbolsFileName = "symbols.raw";
int hFile = FileOpenHistory(SymbolsFileName, FILE_BIN|FILE_READ);
if(hFile < 0) return(-1); if(Selected) { SymbolsNumber = (FileSize(hFile) - 4) / 128; Offset = 116; }
else { SymbolsNumber = FileSize(hFile) / 1936; Offset = 1924; }
ArrayResize(Symbols, SymbolsNumber);
if(Selected) FileSeek(hFile, 4, SEEK_SET);
for(int i = 0; i < SymbolsNumber; i++){Symbols[i] = FileReadString(hFile, 12); FileSeek(hFile, Offset, SEEK_CUR);}
FileClose(hFile);
return(SymbolsNumber);
}
 
Vovo4ka:

Come se un petrosiano intelligente volesse fare una battuta...))

Mi dispiace, i soldi sono tuoi. Più siete, meglio è per noi.
 
ScioMe:

MetaEditor ha un indicatore iMA standard. Sentitevi liberi di usarlo :)
Per favore ditemi dove prenderlo e dove metterlo, sono ancora un completo idiota...
 
Vovo4ka:
Gente! Sto cercando di fare, che avrebbe scambiato molto a seconda del rischio.... quello che non viene fuori.... scrive

Si prega di avvisare dove si trova l'errore....

Avete un solo ordine del tipo giusto nella vostra storia di trading?

if(OrderProfit()>0) break;

Se c'è un ordine che ha chiuso in profitto - usciamo dal ciclo e non controlliamo il resto della storia...

int    orders=HistoryTotal();     // history orders tota l

Questa è la sua funzione? O OrdersHistoryTotal()?

Sono confuso dalla ricerca del numero di ordini perdenti. Se avete bisogno dell'ultimo ordine chiuso, dov'è il controllo dell'ultimo ordine?

Ecco i compiti per la vostra analisi:

int losses=0;
for (int i=0; i<OrdersHistoryTotal(); i++) {                // Цикл по истории терминала
   if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) {         // Если ордер выбран ...
      if (OrderSymbol()!=Symbol())     continue;            // Если символ ордера не наш -  к следующему ордеру
      if (OrderType()>OP_SELL)         continue;            // Если тип ордера не наш -     к следующему ордеру
      if (OrderMagicNumber()!=Magic)   continue;            // Если магик ордера не наш -   к следующему ордеру
      if (OrderProfit()>=0)            continue;            // Если профит ордера в плюсе - к следующему ордеру
      if (OrderProfit()<0)                                  // Ордер закрыт в минусе ...
         losses++;                                          // Увеличиваем счётчик убыточных ордеров      
      }
   else if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) {   // Если не удалось выбрать ордер ...
      Print("Error in history! ", GetLastError());          // Сообщим об ошибке и посмотрим её код
      break;                                                // Прерываем цикл перебора ордеров
      }
   }

Ed ecco un'altra cosa:

if(ldlot<0.1) ldlot=0.1;

Può tutto lo stesso essere meglio fare il controllo per meno del minimo ammissibile?

double MinLot=MarketInfo(Symbol(),MODE_MINLOT);
if (ldlot<MinLot) ldlot=MinLot;

E allo stesso tempo, è più grande del massimo (quando si passa la dimensione del lotto alla funzione)?

double MaxLot=MarketInfo(Symbol(),MODE_MAXLOT);
if (ldlot>MaxLot) ldlot=MaxLot;
 
doon:

Grazie, ma dovrai comunque metterci uno slip.

Non capisco, perché ti serve lì? Mi sembra semplice.
 
ZZZEROXXX:


Temo che se lo Slippage è sempre alto, il DC potrebbe iniziare ad abusarne sistematicamente.

Se il DC inizia ad abusarne, non c'è niente da fare. Ecco un'altra cosa che potrebbe funzionare. Se la vostra società di brokeraggio ha spread fluttuanti, allora è meglio usare la funzione con autodeterminazione della dimensione dello spread e lo slippage dovrebbe essere impostato su tre spread. Allora lo slittamento cambierà dinamicamente.
 
Ditemi, se lavoro con gli ordini per ticket, come scrivere una variabile (int Ticket), come locale statica o come globale usuale o in generale, come locale usuale? Sono confuso. Grazie.
 
Fam:
Per favore, se lavoriamo con ordini per ticket, come scrivere correttamente la variabile (int Ticket), come una locale statica o come una normale globale, o in generale come una normale locale? Sono confuso. Grazie.

Tutto dipende se questa variabile sarà disponibile per tutte le funzioni EA (beh... non tutte, ma alcune di sicuro). Allora la variabile è globale.

Se è usato solo in una funzione, allora è locale.

La domanda è come "in quale acqua mettere i fiori, acqua semplice o zuccherata" ... mentre indovinava, i fiori sono diventati una scopa, nel bagno... :))

 
ZZZEROXXX:


Temo che se lo Slippage è sempre alto, il DC potrebbe abusarne su base sistematica. Vorrei "slittare" dinamicamente - solo se il prezzo sul server è migliore del prezzo al quale l'ordine è stato inviato. Sarebbe simile all'offerta manuale - se il prezzo richiesto non è più disponibile, allora ne verrà offerto uno nuovo che può essere accettato premendo OK o rifiutato - se è la stessa situazione, naturalmente.

Cercate di far dipendere lo slippage dalla volatilità prima. In un mercato calmo sarà minimo, in un mercato veloce si diffonderà di più.