Il codice del programma che crea l'indicatore ZigZagColor sul grafico corrente e lo rimuove dopo la chiusura dell'EA si presenta così
in blocco di inizializzazione EA
//--- create handle of the indicator iCustom
handle_iCustom=iCustom(m_symbol.Name(),Period(),"Examples\\ZigzagColor",
Inp_ZZ_Depth,
Inp_ZZ_Deviation,
Inp_ZZ_Backstep);
ChartIndicatorAdd(ChartID(),0,handle_iCustom);
nel blocco di deinizializzazione di Expert Advisor
(ATTENZIONE per coloro che useranno questo codice! Questa versione del codice è intermedia ed è applicabile solo alle impostazioni dell'indicatore Inp_ZZ_Depth = 80; Inp_ZZ_Deviation = 20; Inp_ZZ_Backstep = 0; con altre impostazioni, l'indicatore non sarà rimosso! Per far sì che l'indicatore si cancelli ad altre impostazioni nel blocco di deinizializzazione, specificatele al posto di 80,20,0).
//---ChartIndicatorDelete(0,0,"ZigZag(80,20,0)");
Ora devo capire come fargli cancellare l'indicatore dopo aver cambiato le sue impostazioni. Ho provato la seguente variante:
Cancella l'indicatore per tutte le impostazioni, ma quando si compila l'EA l'editor genera 3 avvertimenti sulla conversione implicita da numero a stringa:
implicit conversion from 'number' to 'string' ZigZag_Fibonacci_(M1).mq5 230 38
Ho il sospetto che si tratti di questi valori: "+Inp_ZZ_Depth+", "+Inp_ZZ_Deviation+","+Inp_ZZ_Backstep+". Beh, devo studiare ulteriormente il linguaggio di programmazione MQL5.
Il codice finale che crea l'indicatore ZigZagColor sul grafico corrente e lo rimuove dopo la chiusura dell'EA appare così
in blocco di inizializzazione EA
nel blocco di deinizializzazione di EA
(ATTENZIONE per coloro che useranno questo codice! Questa versione del codice è intermedia ed è applicabile solo alle impostazioni dell'indicatore Inp_ZZ_Depth = 80; Inp_ZZ_Deviation = 20; Inp_ZZ_Backstep = 0; con altre impostazioni, l'indicatore non sarà rimosso! Per far sì che l'indicatore si cancelli ad altre impostazioni nel blocco di deinizializzazione, specificatele al posto di 80,20,0).
Ora devo capire come fargli cancellare l'indicatore dopo aver cambiato le sue impostazioni. Ho provato la seguente variante:
Cancella l'indicatore per tutte le impostazioni, ma quando si compila l'EA l'editor genera 3 avvertimenti sulla conversione implicita da numero a stringa:
Ho il sospetto che si tratti di questi valori: "+Inp_ZZ_Depth+", "+Inp_ZZ_Deviation+","+Inp_ZZ_Backstep+". Beh, devo studiare ulteriormente il linguaggio di programmazione MQL5.
L'avvertimento su una conversione implicita del tipo. Per un'implementazione rigorosa, la conversione implicita dà un avvertimento.
Dovreste digitare esplicitamente. E in MT5 è sempre l'esecuzione rigorosa. In MT4 è possibile selezionare e non specificare nelle proprietà #property strict
Io stesso sono autodidatta - e copio dai codici disponibili, - Il problema è che non so come spiegare come scolpire! - qualcosa dentro mi dice come scolpire.
----------------------------------
So che quello che ho modellato, che manca lì, è anche un Trawl per la linea.
Ho aggiunto la rete a strascico.
inputstring t0="---- Trailing Line: -----"; //inputushort InpObjTrailingStop = 0; // Obj: Trailing Stop (distance from price to object, in pips)inputushort InpObjTrailingStep = 0; // Obj: Trailing Step, in pips (1.00045-1.00055=1 pips)inputstring t1="---- Line Name -----"; //inputstring InpObjUpName = "Имя Линии Up"; // Obj: Up (Trailing Horizontal Line) or Trend Line)input ENUM_TRADE_COMMAND InpTradeCommand = UpName_s; // Obj: command: UPinputstring InpObjDownName = "Имя Линии Down"; // Obj: Down (Trailing Horizontal Line) or Trend Line)input ENUM_TRADE_COMMAND InTradeCommand = DownName_b; // Obj: command: DOWNinputushort InpObjStep = 15; // Obj: Step (distance from price to object, in pips)
Avviso sulla conversione di tipo non esplicita. per l'esecuzione diretta (strict) una conversione non esplicita dà un avviso.
Dovreste lanciare esplicitamente i tipi. E in MT5 è sempre l'esecuzione rigorosa. In MT4 è possibile selezionare e non specificare nelle proprietà #property strict
Hai ragione, Valery! Così com'è, tutto funziona come dovrebbe. La versione finale nel blocco di inizializzazione EA:
//--- create handle of the indicator iCustom
handle_iCustom=iCustom(m_symbol.Name(),Period(),"Examples\\ZigzagColor",
Inp_ZZ_Depth,
Inp_ZZ_Deviation,
Inp_ZZ_Backstep);
ChartIndicatorAdd(ChartID(),0,handle_iCustom);
Oooh, grazie mille, con tante informazioni si possono fare tante cose...
Stoper partire per un viaggio di lavoro, quindi sto pensando di approfondire il materiale che mi è stato dato, ma la codifica... Potrei farlo anche su un foglio di carta, sarebbe un buon strumento di allenamento...
Saluti, Roman
Buona giornata a tutti!
Mentre Roman è via per un viaggio di lavoro e non partecipa a questo argomento, continuerò invece a fare domande sul linguaggio di programmazione MQL5. Ho trovato la libreriaMaximum Percentage of Equity Risk in CodeBase su https://www.mql5.com/ru/code/2142. Ho deciso di provare a implementare l'apertura di posizioni di acquisto e vendita in un semplice Expert Advisor, ma non con un lotto fisso, ma con la massima percentuale di rischio azionario.
Ecco il codice sorgente (ho rimosso tutte le cose inutili per concentrarmi sul compito principale):
Vi ho inserito il codice della libreria specificata. Ho ottenuto il seguente codice:
//+------------------------------------------------------------------+//| 11111111111.mq5 |//| Copyright 2020, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2020, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"#include <Trade\SymbolInfo.mqh> // добавлено из библиотекиinputint TakeProfit=300; //Тейк-профитinputint StopLoss=250; //Стоп-лоссinputdouble lot=0.1; //Лотinputdouble MaximumPercentageRisk=25; //Риск - добавлено из библиотекиbool UseMaximumPercentageRisk=true; // добавлено из библиотекиdouble Ask;
double Bid;
//--- этот блок добавлен из библиотеки//+------------------------------------------------------------------+//| GetLotSize RPTrade |//+------------------------------------------------------------------+double GetLotSize(double lotsize)
{
//--- Gets pair specs
CSymbolInfo symInfo;
int digits_bn=symInfo.Digits();
double points_bn=symInfo.Point();
string symbol_bn=_Symbol;
//--- adjust lot int tmpdecimal=1;
double old_lot=lotsize;
//---if((NormalizeDouble(AccountInfoDouble(ACCOUNT_FREEMARGIN)*(MaximumPercentageRisk/100)/1000.0,tmpdecimal)<lotsize)
&& UseMaximumPercentageRisk) //лот подходит под риск ?
{
lotsize=NormalizeDouble(AccountInfoDouble(ACCOUNT_FREEMARGIN)
*(MaximumPercentageRisk/100)/1000.0,tmpdecimal); //расчет нового размера лота if(lotsize<SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_MIN)) //размер лота подходит под минимльный размер лота брокера ?
{
lotsize=SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_MIN); //Нет! Настройка размера лота под минимальный размер лота брокераPrint(_Symbol," Lot adjusted from ",old_lot," для уменьшения размера разрешенного сервером ",lotsize);
}
else
{
Print(_Symbol," Lot adjusted from ",old_lot,
" to ",lotsize," для соответствия условию максимального риска. В каждой сделке рисковать можно только ",
MaximumPercentageRisk,"% от свободной маржи."); //Да! if(MathAbs(lotsize/SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_STEP)
-MathRound(lotsize/SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_STEP)))>1.0 E-10) //Размер лота подходит под разрешенный шаг брокера ?
{
lotsize=SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_STEP)
*NormalizeDouble(lotsize/SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_STEP),0); //НЕТ! Перерасчет размера лота. Print("M-",_Symbol," Warning: Your calculated percentage at risk lot size of was not a multiple of minimal step",
SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_STEP),". Размер лота изменился до",lotsize);
}
}
}
return(lotsize);
}
//+------------------------------------------------------------------+//| Функция открытия длинной (Long) позиции. |//+------------------------------------------------------------------+int OpenLong(double volume=0.1,
int slippage=10,
string comment="Long",
int magic=0)
{
MqlTradeRequest my_trade;
MqlTradeResult my_trade_result;
ZeroMemory(my_trade);
my_trade.action=TRADE_ACTION_DEAL;
my_trade.symbol=Symbol();
my_trade.volume=NormalizeDouble(volume,1);
my_trade.price=NormalizeDouble(Ask,_Digits);
my_trade.sl=NormalizeDouble(Ask-StopLoss*_Point,_Digits);
my_trade.tp=NormalizeDouble(Ask+TakeProfit*_Point,_Digits);
my_trade.deviation=slippage;
my_trade.type=ORDER_TYPE_BUY;
my_trade.type_filling=ORDER_FILLING_FOK;
my_trade.comment=comment;
my_trade.magic=magic;
ResetLastError();
if(OrderSend(my_trade,my_trade_result))
{
Print("Код результата операции - ",my_trade_result.retcode);
}
else
{
Print("Код результата операции - ",my_trade_result.retcode);
Print("Ошибка открытия ордера = ",GetLastError());
}
return(0);
}
//+------------------------------------------------------------------+//| функция открытия короткой (Short) позиции. |//| Аналогична функции открытия длинной позиции. |//+------------------------------------------------------------------+
.
.
.
.
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
return(0);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason){}
//+------------------------------------------------------------------+//| Expert OnTick function |//+------------------------------------------------------------------+voidOnTick()
{
. double Open[];
.
.
if(Open[1]>(Open[2]))
{
OpenShort(lot,10,"Short",1234);
return;
}
if((Open[1]<Open[2])
{
OpenLong(lot,10,"Long",1234);
cantrade=false;
return;
}
}
}
return;
}
//+------------------------------------------------------------------+
Ma l'Expert Advisor continua a lavorare con un lotto fisso, cioè il rischio non viene considerato. Si prega di consigliare cosa fare per rendere la percentuale di rischio della plusvalenza.
Change Chart and Timeframe Модифицированные скрипты для быстрого изменения графиков и таймфреймов на всех графиках при помощи горячих клавиш. Apply Template Простой скрипт для применения шаблона и/или таймфрейма ко всем открытым графикам. Long position Простой скрипт...
Mentre Roman è via per un viaggio di lavoro e non partecipa attivamente a questo thread, continuerò invece a fare domande sul linguaggio di programmazione MQL5. Ho trovato la libreriaMaximum Percentage of Equity Risk in CodeBase su https://www.mql5.com/ru/code/2142. Ho deciso di provare a implementare l'apertura di posizioni di acquisto e vendita in un semplice Expert Advisor, ma non con un lotto fisso, ma con la massima percentuale di rischio azionario.
Ecco il codice sorgente (ho rimosso tutte le cose inutili per concentrarmi sul compito principale):
Vi ho inserito il codice della libreria specificata. Ho ottenuto il seguente codice:
Ma l'Expert Advisor continua a lavorare con un lotto fisso, cioè il rischio non viene considerato. Si prega di consigliare cosa fare per rendere la percentuale di rischio della plusvalenza.
Il mio rispetto Vladimir.
Da come l'hai scritto, è così che funziona. Avete bisogno di una linea, se Lot==0, poi contate il lotto a rischio e assegnate il valore del calcolo alla variabile Lot alla fine.
Nel Quaternario in questo modo, attraverso la variabile aggiuntiva Lts
bool CheckMoneyForTrade()
{
RefreshRates(); // Обновление данных
Min_Lot=MarketInfo(Symb,MODE_MINLOT); // Миним. колич. лотов
Free =AccountFreeMargin(); // Свободн средства
One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);// Стоимость 1 лота
Step =MarketInfo(Symb,MODE_LOTSTEP); // Шаг изменен размераif (Lots > 0) // Если заданы лоты,то
Lts =Lots; // с ними и работаем else// % свободных средств
Lts=MathFloor(Free*Prots/One_Lot/Step)*Step;// Для открытияif(Lts < Min_Lot) Lts=Min_Lot; // Не меньше минимальнif (Lts*One_Lot > Free) // Лот дороже свободн.
{
Alert(" Not enough money for ", Lts," lots");
Work=false;
return(false) ; // Выход из функции()
}
return(true);
}
Ecco come è scritto e come funziona. Abbiamo bisogno di una linea se Lot==0 allora contiamo lotto rischioso e alla fine assegniamo il valore del calcolo alla variabile Lot.
Nel Quaternario è così, attraverso la variabile aggiuntiva Lts
GRAZIE MILLE A TUTTI VOI!!!
Il codice del programma che crea l'indicatore ZigZagColor sul grafico corrente e lo rimuove dopo la chiusura dell'EA si presenta così
in blocco di inizializzazione EA
nel blocco di deinizializzazione di Expert Advisor
(ATTENZIONE per coloro che useranno questo codice! Questa versione del codice è intermedia ed è applicabile solo alle impostazioni dell'indicatore Inp_ZZ_Depth = 80; Inp_ZZ_Deviation = 20; Inp_ZZ_Backstep = 0; con altre impostazioni, l'indicatore non sarà rimosso! Per far sì che l'indicatore si cancelli ad altre impostazioni nel blocco di deinizializzazione, specificatele al posto di 80,20,0).
Ora devo capire come fargli cancellare l'indicatore dopo aver cambiato le sue impostazioni. Ho provato la seguente variante:
Cancella l'indicatore per tutte le impostazioni, ma quando si compila l'EA l'editor genera 3 avvertimenti sulla conversione implicita da numero a stringa:
Ho il sospetto che si tratti di questi valori: "+Inp_ZZ_Depth+", "+Inp_ZZ_Deviation+","+Inp_ZZ_Backstep+". Beh, devo studiare ulteriormente il linguaggio di programmazione MQL5.
Grazie ancora per il vostro gentile aiuto!
Sinceramente, Vladimir.
GRAZIE MILLE A TUTTI VOI!!!
Il codice finale che crea l'indicatore ZigZagColor sul grafico corrente e lo rimuove dopo la chiusura dell'EA appare così
in blocco di inizializzazione EA
nel blocco di deinizializzazione di EA
(ATTENZIONE per coloro che useranno questo codice! Questa versione del codice è intermedia ed è applicabile solo alle impostazioni dell'indicatore Inp_ZZ_Depth = 80; Inp_ZZ_Deviation = 20; Inp_ZZ_Backstep = 0; con altre impostazioni, l'indicatore non sarà rimosso! Per far sì che l'indicatore si cancelli ad altre impostazioni nel blocco di deinizializzazione, specificatele al posto di 80,20,0).
Ora devo capire come fargli cancellare l'indicatore dopo aver cambiato le sue impostazioni. Ho provato la seguente variante:
Cancella l'indicatore per tutte le impostazioni, ma quando si compila l'EA l'editor genera 3 avvertimenti sulla conversione implicita da numero a stringa:
Ho il sospetto che si tratti di questi valori: "+Inp_ZZ_Depth+", "+Inp_ZZ_Deviation+","+Inp_ZZ_Backstep+". Beh, devo studiare ulteriormente il linguaggio di programmazione MQL5.
Grazie ancora per il vostro gentile aiuto!
Sinceramente, Vladimir.
L'avvertimento su una conversione implicita del tipo. Per un'implementazione rigorosa, la conversione implicita dà un avvertimento.
Dovreste digitare esplicitamente. E in MT5 è sempre l'esecuzione rigorosa. In MT4 è possibile selezionare e non specificare nelle proprietà #property strict
Io stesso sono autodidatta - e copio dai codici disponibili, - Il problema è che non so come spiegare come scolpire! - qualcosa dentro mi dice come scolpire.
----------------------------------
So che quello che ho modellato, che manca lì, è anche un Trawl per la linea.
Ho aggiunto la rete a strascico.
Avviso sulla conversione di tipo non esplicita. per l'esecuzione diretta (strict) una conversione non esplicita dà un avviso.
Dovreste lanciare esplicitamente i tipi. E in MT5 è sempre l'esecuzione rigorosa. In MT4 è possibile selezionare e non specificare nelle proprietà #property strict
Hai ragione, Valery! Così com'è, tutto funziona come dovrebbe. La versione finale nel blocco di inizializzazione EA:
nel blocco di deinizializzazione EA:
Grazie per il suggerimento!
Saluti, Vladimir.
Oooh, grazie mille, con tante informazioni si possono fare tante cose...
Stoper partire per un viaggio di lavoro, quindi sto pensando di approfondire il materiale che mi è stato dato, ma la codifica... Potrei farlo anche su un foglio di carta, sarebbe un buon strumento di allenamento...
Saluti, Roman
Buona giornata a tutti!
Mentre Roman è via per un viaggio di lavoro e non partecipa a questo argomento, continuerò invece a fare domande sul linguaggio di programmazione MQL5. Ho trovato la libreria Maximum Percentage of Equity Risk in CodeBase su https://www.mql5.com/ru/code/2142. Ho deciso di provare a implementare l'apertura di posizioni di acquisto e vendita in un semplice Expert Advisor, ma non con un lotto fisso, ma con la massima percentuale di rischio azionario.
Ecco il codice sorgente (ho rimosso tutte le cose inutili per concentrarmi sul compito principale):
Vi ho inserito il codice della libreria specificata. Ho ottenuto il seguente codice:
Ma l'Expert Advisor continua a lavorare con un lotto fisso, cioè il rischio non viene considerato. Si prega di consigliare cosa fare per rendere la percentuale di rischio della plusvalenza.
Saluti, Vladimir.
Buona giornata a tutti voi!
Mentre Roman è via per un viaggio di lavoro e non partecipa attivamente a questo thread, continuerò invece a fare domande sul linguaggio di programmazione MQL5. Ho trovato la libreria Maximum Percentage of Equity Risk in CodeBase su https://www.mql5.com/ru/code/2142. Ho deciso di provare a implementare l'apertura di posizioni di acquisto e vendita in un semplice Expert Advisor, ma non con un lotto fisso, ma con la massima percentuale di rischio azionario.
Ecco il codice sorgente (ho rimosso tutte le cose inutili per concentrarmi sul compito principale):
Vi ho inserito il codice della libreria specificata. Ho ottenuto il seguente codice:
Ma l'Expert Advisor continua a lavorare con un lotto fisso, cioè il rischio non viene considerato. Si prega di consigliare cosa fare per rendere la percentuale di rischio della plusvalenza.
Il mio rispetto Vladimir.
Da come l'hai scritto, è così che funziona. Avete bisogno di una linea, se Lot==0, poi contate il lotto a rischio e assegnate il valore del calcolo alla variabile Lot alla fine.
Nel Quaternario in questo modo, attraverso la variabile aggiuntiva Lts
Signori, l'intero argomento è una pagina di discussione, il resto sono codici. Non è sufficiente inserire i codici?
Come si fa ad aiutare allora?
Come si fa ad aiutare allora?
Mettete solo quello che vi viene chiesto
Ecco come è scritto e come funziona. Abbiamo bisogno di una linea se Lot==0 allora contiamo lotto rischioso e alla fine assegniamo il valore del calcolo alla variabile Lot.
Nel Quaternario è così, attraverso la variabile aggiuntiva Lts
Grazie, Valeriy, lo proverò in serata!
Sinceramente, Vladimir.