Ciao, guru della programmazione MQL4! Per favore, consigliatemi come questo sia possibile:
Un pezzo di codice di programma:
LogAdd("Начинаю вычисления переменных для текущего тика ... ");
for (int i = OrdersTotal()-1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS);
LogAdd("Выбираю ордер с тикетом: " + i);
if ((OrderOpenTime() > opnTime) && (OrderType() == OP_BUY) || (OrderType() == OP_SELL)) {
opnTime = OrderOpenTime();
currentTicket = OrderTicket();
currentStopLoss = OrderStopLoss();
LogAdd("Ордер открыт позже предыдущего, не является отложенным. Записываю переменные: opnTime - " + opnTime + ", currentTicket - " + currentTicket + ", currentStopLoss - " + currentStopLoss + ".");
}
if (OrderType() == OP_BUY) {
buyCntr ++;
buyOpnPrice = OrderOpenPrice();
lotsSumBuy += OrderLots();
TrailingByShadows(OrderTicket(), Period(), 11, 0);
LogAdd("Ордер не является отложенным, тип ордера - на покупку, обновляю переменные, пытаюсь трейлить: buyCntr - " + buyCntr + ", buyOpnPrice - " + buyOpnPrice + ", lotsSumBuy - " + lotsSumBuy + ".");
}
if (OrderType() == OP_SELL) {
sellCntr ++;
sellOpnPrice = OrderOpenPrice();
lotsSumSell += OrderLots();
TrailingByShadows(OrderTicket(), Period(), 11, 0);
LogAdd("Ордер не является отложенным, тип ордера - на продажу, обновляю переменные, пытаюсь трейлить: sellCntr - " + sellCntr + ", sellOpnPrice - " + sellOpnPrice + ", lotsSumSell - " + lotsSumSell + ".");
} if (OrderType() == OP_SELLSTOP) {
sellOpnPrice = OrderOpenPrice();
LogAdd("Ордер является отложенным, тип ордера - на продажу, фиксирую цену открытия: sellOpnPrice - " + sellOpnPrice + ".");
}
if (OrderType() == OP_BUYSTOP) {
buyOpnPrice = OrderOpenPrice();
LogAdd("Ордер является отложенным, тип ордера - на покупку, фиксирую цену открытия: buyOpnPrice - " + buyOpnPrice + ".");
}
}
LogAdd("Вычисления переменных для текущего тика завершены.");
Un pezzo di registro per questa sezione:
2013.10.215:59:0 - Начинаю вычисления переменных для текущего тика ...
2013.10.215:59:0 - Выбираю ордер с тикетом: 52013.10.215:59:0 - Ордер является отложенным, тип ордера - на продажу, фиксирую цену открытия: sellOpnPrice - 1.35250000.
2013.10.215:59:0 - Выбираю ордер с тикетом: 42013.10.215:59:0 - Ордер открыт позже предыдущего, не является отложенным. Записываю переменные: opnTime - 1380728738, currentTicket - 93537240, currentStopLoss - 0.00000000.2013.10.215:59:0 - Ордер не является отложенным, тип ордера - на покупку, обновляю переменные, пытаюсь трейлить: buyCntr - 1, buyOpnPrice - 1.35620000, lotsSumBuy - 0.06000000.
2013.10.215:59:0 - Ордер не является отложенным, тип ордера - на продажу, обновляю переменные, пытаюсь трейлить: sellCntr - 1, sellOpnPrice - 1.35250000, lotsSumSell - 0.01000000.2013.10.215:59:0 - Выбираю ордер с тикетом: 32013.10.215:59:0 - Ордер не является отложенным, тип ордера - на продажу, обновляю переменные, пытаюсь трейлить: sellCntr - 2, sellOpnPrice - 1.35250000, lotsSumSell - 0.04000000.
2013.10.215:59:0 - Выбираю ордер с тикетом: 22013.10.215:59:0 - Ордер не является отложенным, тип ордера - на покупку, обновляю переменные, пытаюсь трейлить: buyCntr - 2, buyOpnPrice - 1.35620000, lotsSumBuy - 0.07000000.
2013.10.215:59:0 - Ордер не является отложенным, тип ордера - на продажу, обновляю переменные, пытаюсь трейлить: sellCntr - 3, sellOpnPrice - 1.35250000, lotsSumSell - 0.05000000.
2013.10.215:59:0 - Выбираю ордер с тикетом: 12013.10.215:59:0 - Ордер не является отложенным, тип ордера - на покупку, обновляю переменные, пытаюсь трейлить: buyCntr - 3, buyOpnPrice - 1.35620000, lotsSumBuy - 0.08000000.
2013.10.215:59:0 - Ордер не является отложенным, тип ордера - на продажу, обновляю переменные, пытаюсь трейлить: sellCntr - 4, sellOpnPrice - 1.35250000, lotsSumSell - 0.06000000.
2013.10.215:59:0 - Выбираю ордер с тикетом: 02013.10.215:59:0 - Ордер не является отложенным, тип ордера - на продажу, обновляю переменные, пытаюсь трейлить: sellCntr - 5, sellOpnPrice - 1.35250000, lotsSumSell - 0.07000000.
2013.10.215:59:0 - Вычисления переменных для текущего тика завершены.
La domanda è come per lo stesso ordine le condizioni avrebbero potuto funzionare:
if (OrderType() == OP_BUY) {
...
}
if (OrderType() == OP_SELL) {
...
}
Non capisco qualcosa, ma poi logicamente si scopre che per questo ordine:
OP_BUY == OP_SELL
Fondamentalmente non mi interessa perché questo accade, ciò che conta è che sellCntr++ e buyCntr++ sono eseguiti senza ambiguità per un certo tipo di ordine aperto, aiutatemi a sistemarlo?
Ciao, guru della programmazione MQL4! Per favore, consigliatemi come questo sia possibile:
Un pezzo di codice di programma:
Un pezzo di registro per questa sezione:
La domanda è come per lo stesso ordine le condizioni avrebbero potuto funzionare:
Non capisco qualcosa, ma poi logicamente si scopre che per questo ordine:
Fondamentalmente non mi interessa perché questo accade, ciò che conta è che sellCntr++ e buyCntr++ sono eseguiti in modo non ambiguo per un certo tipo di ordine aperto, aiutatemi a risolvere?
Come fai a sapere che è lo stesso ordine? Non si stampa il biglietto ;).... Sono sicuro: quando si pesca a strascico, c'è un eccesso di ordini ;) - L'errore indotto viene da lì.
TrailingByShadows(OrderTicket(), Period(), 11, 0); ?????????????????????????????? Вы при трале разве ордера не перебираете ??????????
VladislavVG: Come potete essere sicuri che sia lo stesso ordine? Non si stampa il biglietto ;).... Ne sono sicuro: quando si pesca a strascico, l'ordine è sovracampionato ;) - L'errore indotto viene da lì.
Logicamente, perché dovrei passare attraverso gli ordini nella rete a strascico se so già quale ordine specifico devo strascicare? Non c'è forza bruta, ecco il codice:
Cari programmatori, potreste dirmi perché quando ho riavviato di nuovo il mio computer, quando ho aperto il terminale invece di un grafico normale ho visto una finestra grigia e ho perso le posizioni aperte, EA, indicatori, ma quando ho aperto un nuovo grafico, le posizioni sono apparse, ma non c'erano EA e indicatori, ho dovuto installarli di nuovo. Cosa c'entra questo? Ho dovuto installarli di nuovo, grazie.
È sorto un tale problema. Il tester di strategia funziona solo una volta. Più precisamente, il test di visualizzazione viene attivato una volta, e le volte successive che si preme il pulsante "start", la casella di controllo "visualizzazione" viene resettata e non succede niente (più o meno non succede). Come si può sconfiggere questo?
Logicamente, perché dovrei passare attraverso gli ordini nella rete a strascico se so già quale ordine specifico devo strascicare? Non c'è forza bruta, ecco il codice:
PS: A proposito, questo problema si verifica solo in condizioni reali, cioè non si riproduce nel tester.
Provate a eseguirlo in questa variante:
LogAdd("Начинаю вычисления переменных для текущего тика ... ");
for (int i = OrdersTotal()-1; i >= 0; i--)
{
if(!OrderSelect(i, SELECT_BY_POS)) continue;
int OrdType=OrderType() ;
int OrdTckt = OrderTicket();
LogAdd("Выбираю ордер ( "+i+" ) с тикетом: " + OrdTckt);
if ((OrderOpenTime() > opnTime) && (OrdType == OP_BUY) || (OrdType == OP_SELL)) {
opnTime = OrderOpenTime();
currentTicket = OrderTicket();
currentStopLoss = OrderStopLoss();
LogAdd("Ордер открыт позже предыдущего, не является отложенным. Записываю переменные: opnTime - " + opnTime + ", currentTicket - " + currentTicket + ", currentStopLoss - " + currentStopLoss + ".");
}
if (OrdType == OP_BUY)
{
buyCntr ++;
buyOpnPrice = OrderOpenPrice();
lotsSumBuy += OrderLots();
TrailingByShadows(OrderTicket(), Period(), 11, 0);
LogAdd("Ордер "+OrdTckt <-> OrderTicket()+" не является отложенным, тип ордера - на покупку, обновляю переменные, пытаюсь трейлить: buyCntr - " + buyCntr + ", buyOpnPrice - " + buyOpnPrice + ", lotsSumBuy - " + lotsSumBuy + ".");
}
if (OrdType== OP_SELL)
{
sellCntr ++;
sellOpnPrice = OrderOpenPrice();
lotsSumSell += OrderLots();
TrailingByShadows(OrderTicket(), Period(), 11, 0);
LogAdd("Ордер "+OrdTckt <-> OrderTicket()+" не является отложенным, тип ордера - на продажу, обновляю переменные, пытаюсь трейлить: sellCntr - " + sellCntr + ", sellOpnPrice - " + sellOpnPrice + ", lotsSumSell - " + lotsSumSell + ".");
}
if (OrderType() == OP_SELLSTOP)
{
sellOpnPrice = OrderOpenPrice();
LogAdd("Ордер "+OrdTckt <-> OrderTicket()+" является отложенным, тип ордера - на продажу, фиксирую цену открытия: sellOpnPrice - " + sellOpnPrice + ".");
}
if (OrderType() == OP_BUYSTOP)
{
buyOpnPrice = OrderOpenPrice();
LogAdd("Ордер "+OrdTckt <-> OrderTicket()+" является отложенным, тип ордера - на покупку, фиксирую цену открытия: buyOpnPrice - " + buyOpnPrice + ".");
}
}
LogAdd("Вычисления переменных для текущего тика завершены.");
Sembra che si possa fare programmaticamente attraverso i modelli. Creare un modello con un indicatore, con _lread kernel32.dll leggere valore shift_size, con_lwrite scriverci un numero da 10 a 50, come tali intervalli può accettare questo parametro, poi attraverso InternalMsg caricare un modello. Ma non sappiamo se è 33511 o 35511. In WinUser32.mqh, è la prima opzione, mentre nel forum è la seconda. La domanda deve essere rivolta a Junko. È molto più facile in MT5. CHART_SHIFT_SIZE è disponibile attraverso ChartSetString() e ChartGetString() da qualsiasi punto del codice... Forse ci sono altre opzioni in MT4? Domanda sciocca, però...
Per favore, ditemi cosa sto sbagliando. Sto cercando di fare un semplice indicatore:
{ int limit,i; double last; int counted_bars = IndicatorCounted(); //---- check for possible errors if (counted_bars < 0) return(-1); //---- last counted bar will be recounted if(counted_bars > 0) counted_bars--; limit = Bars - counted_bars; //---- for(i=limit; i>=0; i--) { double OptClose = Close[i]*10000; if (MathMod(OptClose,step1)==0) { Buffer0[i] = Close[i]; last = Close[i]; } else Buffer0[i] = last; } //---- return(0); } //+------------------------------------------------------------------+Funziona nella finestra del grafico, ma quando provo a testarlo nell'Expert Advisor, o disegna qualunque cosa sia o "nessun passo".
Per favore, ditemi cosa sto sbagliando. Sto cercando di fare un semplice indicatore:
Funziona nella finestra del grafico, ma quando provo a testarlo nell'Expert Advisor, o disegna qualunque cosa sia o "nessun passo".
Provato. Anche solo nella finestra non funziona così. A quanto pare c'è una specie di trucco qui. Ora funziona così, ma è terribilmente lento:
Questo con il controllo del ricalcolo dell'ultima barra disabilitato.
Ciao, guru della programmazione MQL4! Per favore, consigliatemi come questo sia possibile:
Un pezzo di codice di programma:
Un pezzo di registro per questa sezione:
La domanda è come per lo stesso ordine le condizioni avrebbero potuto funzionare:Non capisco qualcosa, ma poi logicamente si scopre che per questo ordine:
Fondamentalmente non mi interessa perché questo accade, ciò che conta è che sellCntr++ e buyCntr++ sono eseguiti senza ambiguità per un certo tipo di ordine aperto, aiutatemi a sistemarlo?Ciao, guru della programmazione MQL4! Per favore, consigliatemi come questo sia possibile:
Un pezzo di codice di programma:
Un pezzo di registro per questa sezione:
La domanda è come per lo stesso ordine le condizioni avrebbero potuto funzionare:Non capisco qualcosa, ma poi logicamente si scopre che per questo ordine:
Fondamentalmente non mi interessa perché questo accade, ciò che conta è che sellCntr++ e buyCntr++ sono eseguiti in modo non ambiguo per un certo tipo di ordine aperto, aiutatemi a risolvere?TrailingByShadows(OrderTicket(), Period(), 11, 0); ?????????????????????????????? Вы при трале разве ордера не перебираете ??????????Come potete essere sicuri che sia lo stesso ordine? Non si stampa il biglietto ;).... Ne sono sicuro: quando si pesca a strascico, l'ordine è sovracampionato ;) - L'errore indotto viene da lì.
Logicamente, perché dovrei passare attraverso gli ordini nella rete a strascico se so già quale ordine specifico devo strascicare? Non c'è forza bruta, ecco il codice:
PS: A proposito, questo problema si verifica solo in condizioni reali, cioè non si riproduce nel tester.È sorto un tale problema. Il tester di strategia funziona solo una volta. Più precisamente, il test di visualizzazione viene attivato una volta, e le volte successive che si preme il pulsante "start", la casella di controllo "visualizzazione" viene resettata e non succede niente (più o meno non succede). Come si può sconfiggere questo?
Logicamente, perché dovrei passare attraverso gli ordini nella rete a strascico se so già quale ordine specifico devo strascicare? Non c'è forza bruta, ecco il codice:
PS: A proposito, questo problema si verifica solo in condizioni reali, cioè non si riproduce nel tester.Provate a eseguirlo in questa variante:
Vedere cosa dirà il registro.
WindowBarsPerChart() - WindowFirstVisibleBar() - 2;si può, ma come esporlo.
Aggiunto
Sembra che si possa fare programmaticamente attraverso i modelli. Creare un modello con un indicatore, con _lread kernel32.dll leggere valore shift_size, con _lwrite scriverci un numero da 10 a 50, come tali intervalli può accettare questo parametro, poi attraverso InternalMsg caricare un modello. Ma non sappiamo se è 33511 o 35511. In WinUser32.mqh, è la prima opzione, mentre nel forum è la seconda. La domanda deve essere rivolta a Junko. È molto più facile in MT5. CHART_SHIFT_SIZE è disponibile attraverso ChartSetString() e ChartGetString() da qualsiasi punto del codice... Forse ci sono altre opzioni in MT4? Domanda sciocca, però...