Cosa faccio ora? Ho una strategia basata sul canale - c'è una sostituzione alternativa?
Certo che c'è. Calcola i valori, salvali in una matrice o struttura e usali per il tuo EA. E si possono disegnare gli oggetti anche da lì - i valori sono disponibili.
Voglio implementare quanto segue la possibilità di aggiungere diversi intervalli di tempo a UN foglio (in finestre diverse ma su un foglio) Si prega di consigliare dove andare e dove scavare). è possibile attraverso mql o WInApi? forse ci sono esempi dell'articolo che non sono riuscito a trovare(
per favore aiutatemi a risolvere questo problema! dà errore 'Void' - dichiarazione senza tipo 36 4 e dove dovrei riorganizzare o scrivere return? //-------------------------------------------------------------------- Void OnTick() {
void è scritto con una piccola minuscola invece che con una maiuscola. Guarda, è di un colore diverso. Metti il cursore su questa parola e premi F1 - spesso aiuta.
Dopo averlo riparato appaiono molti messaggi d ' errore... Ho riparato i messaggi d'errore, ma controllate voi stessi la logica
#property strictbool Результат;
externint SL = 200, //Стоплосс в пунктах
TStop = 20, //
TStep = 10, //
TP = 85; //Тейкпрофит в пунктах//extern double Lot = 0.10; //используется только при risk = 0externdouble Lots = 0; // лот, если 0, то динамическийexterndouble RiskPercentage = 50; // % от депо на лот, если динамическийexternint MaxOrders = 6; //Максимальное кол-во ордеров одного направления//--------------------------------------------------------------------int STOPLEVEL,Magic=123321,tip;
datetime TimeBar;
string txt;
//--------------------------------------------------------------------int init()
{
if(Digits==3||Digits==5)
{
TStop *=10;
TStep *=10;
SL *=10;
}
return(INIT_SUCCEEDED);
}
//--------------------------------------------------------------------voidOnTick()
{
double Lot = Lots;
int Ticket = 0;
if (Lots==0)
{
double margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
double minLot = MarketInfo(Symbol(), MODE_MINLOT);
double maxLot = MarketInfo(Symbol(), MODE_MAXLOT);
double step = MarketInfo(Symbol(), MODE_LOTSTEP);
double account = AccountFreeMargin();
double percentage = account*RiskPercentage/100;
Lot = MathRound(percentage/margin/step)*step;
if(Lot < minLot) Lot = minLot;
if(Lot > maxLot)Lot = maxLot;
}
int buy=0,sell=0;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS))
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
tip=OrderType();
if (tip==0) buy++;
if (tip==1) sell++;
}
}
Comment(txt,"\nБаланс ",DoubleToStr(AccountBalance(),2),"\nЭквити ",DoubleToStr(AccountEquity(),2),"\nBuy ",buy,"\nSel ",sell);
double TrPr=0,StLo=0;
double L = NormalizeDouble(Low[0], Digits);
double L1 = NormalizeDouble(Low[1], Digits);
double L2 = NormalizeDouble(Low[2], Digits);
double L3 = NormalizeDouble(Low[3], Digits);
double H = NormalizeDouble(High[0],Digits);
double H1 = NormalizeDouble(High[1],Digits);
double H2 = NormalizeDouble(High[2],Digits);
double H3 = NormalizeDouble(High[3],Digits);
double O = NormalizeDouble(Open[0], Digits);
double O1 = NormalizeDouble(Open[1], Digits);
double O2 = NormalizeDouble(Open[2], Digits);
double O3 = NormalizeDouble(Open[3], Digits);
double C = NormalizeDouble(Close[0],Digits);
double C1 = NormalizeDouble(Close[1],Digits);
double C2 = NormalizeDouble(Close[2],Digits);
double C3 = NormalizeDouble(Close[3],Digits);
//LONGif (buy<MaxOrders && TimeBar!=Time[0]&& H>H1&&H1>H2&&H2>H3)
{
if (TP!=0) TrPr = NormalizeDouble(Ask + TP * Point,Digits);
if (SL!=0) StLo = NormalizeDouble(Bid - SL * Point,Digits);
Ticket=OrderSend(Symbol(),OP_BUY, Lots,NormalizeDouble(Ask,Digits),3,0,0,"BreakdownLevelCandleMA",Magic,0,Blue);
if (Ticket==0)
Print("Error BUY",GetLastError(),"",Symbol()," Lot ",Lot," SL ",StLo," TP ",TrPr);
else
{
Результат=OrderModify(Ticket,OrderOpenPrice(),StLo,TrPr,0,Blue);
TimeBar=Time[0];
}
}
//SHORTif (sell<MaxOrders && TimeBar!=Time[0]&& L>L1&&L1>L2&&L2>L3)
{
if (TP!=0) TrPr = NormalizeDouble(Bid - TP * Point,Digits);
if (SL!=0) StLo = NormalizeDouble(Ask + SL * Point,Digits);
Ticket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),3,0,0,"BreakdownLevelCandleMA",Magic,0,Red);
if (Ticket==0)
Print("Error SELL",GetLastError(),"",Symbol()," Lot ",Lot," SL ",StLo," TP ",TrPr);
else
{
Результат=OrderModify(Ticket,OrderOpenPrice(),StLo,TrPr,0,Red);
TimeBar=Time[0];
}
}
Trailing();
}
//!!! куда передвинуть? return(0);void Trailing()
{
for(int i=OrdersTotal() -1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY)
{
if (Bid-OrderOpenPrice()> TStop*Point || OrderStopLoss() ==0)
{
if(OrderStopLoss()<Bid-(TStep+TStop)*Point || OrderStopLoss() ==0)
{
if(!OrderModify(OrderTicket(), OrderOpenPrice(),NormalizeDouble(Bid-TStop*Point, Digits),0,0))
Print("Ошибка модификации ордера на покупку");
}
}
}
if(OrderType()==OP_SELL)
{
if (OrderOpenPrice()-Ask>TStop*Point || OrderStopLoss() ==0)
{
if((OrderStopLoss()> (Ask+(TStep+TStop)*Point)) || (OrderStopLoss()==0) )
{
if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TStop*Point,Digits),0,0))
{
Print("Ошибка модификации ордера на продажу");
}
}
}
}
}
}
}
}
void è scritto con una piccola minuscola, non con una grande maiuscola. Vedi se è di un colore diverso. Metti il cursore su questa parola e premi F1 - spesso aiuta.
Dopo averlo aggiustato appaiono così tanti messaggi di errore... Corretti i messaggi di errore, ma controllate voi stessi la logica
Salve, signori commercianti! Ho scritto un robot di segnalazione basato sul codice che ho postato sopra. Il robot genera segnali per le opzioni quasi accuratamente, ma con un ritardo di due barre. Cosa dovrei cambiare nel codice per produrre gli stessi risultati ma due barre prima? O è impossibile? Grazie.
Potete per favore consigliarmi - ho un indicatore personalizzato - Canale - ho bisogno di restituire il valore del limite superiore del canale - come posso farlo?
La variabile int contiene esattamente il numero di secondi dal 1970, mentre la variabile datetime contiene la data.
Se avete bisogno di una certa barra nella storia, allora non importa come la specificate - per data o per numero di secondi, in ogni caso, la variabile indicherà il tempo di apertura di questa particolare barra, indipendentemente dall'arrivo di nuovi tick e dall'apertura di nuove barre.
Grazie mille, ma c'è un altro problema. Ho un indicatore che ha la funzione stat, questa funzione dovrebbe essere usata SOLO quando arriva un nuovo segnale, ma questo problema è contato su ogni barra, ho fatto tutto e normalizzato il doble in confronto, quindi credo di essere fregato. Ucciso l'intera serata, qualcuno può spiegare cosa c'è di sbagliato ???? L'indicatore nell'atache nella linea 193 è una chiamata di funzione con una condizione, ma la condizione non è soddisfatta e il Furction stat è calcolato all'arrivo di ogni barra, sono già annoiato di trovare l'errore, ragazzi aiutate per favore!!!!! Grazie in anticipo....
Ho scoperto solo ora che la funzione stat viene ricalcolata se l'indicatore viene chiamato da un altro indicatore, quando entrambi sono sul grafico. Cioè, una volta viene calcolato per se stesso e la seconda volta per l'indicatore che lo chiama. Che cos'è?
Il seguente è mostrato nell'immagine. Il commento in alto è il valore del buffer nell'indicatore principale in cui avviene il calcolo, e la stampa (sotto) è lo stesso buffer, ma solo chiamato in un altro indicatore ed emesso nella stampa. La differenza è significativa, MA PERCHÉ!!!!!
il primo file è quello principale, il secondo richiama il buffer del primo....
Cosa faccio ora? Ho una strategia basata sul canale - c'è una sostituzione alternativa?
Cosa faccio ora? Ho una strategia basata sul canale - c'è una sostituzione alternativa?
Per la vendita, è possibile incorporare con#resource
la possibilità di aggiungere diversi intervalli di tempo a UN foglio (in finestre diverse ma su un foglio)
Si prega di consigliare dove andare e dove scavare). è possibile attraverso mql o WInApi?
forse ci sono esempi dell'articolo che non sono riuscito a trovare(
per favore aiutatemi a risolvere questo problema! dà errore 'Void' - dichiarazione senza tipo 36 4 e dove dovrei riorganizzare o scrivere return?
//--------------------------------------------------------------------
Void OnTick()
{
void è scritto con una piccola minuscola invece che con una maiuscola. Guarda, è di un colore diverso. Metti il cursore su questa parola e premi F1 - spesso aiuta.
Dopo averlo riparato appaiono molti messaggi d ' errore... Ho riparato i messaggi d'errore, ma controllate voi stessi la logica
void è scritto con una piccola minuscola, non con una grande maiuscola. Vedi se è di un colore diverso. Metti il cursore su questa parola e premi F1 - spesso aiuta.
Dopo averlo aggiustato appaiono così tanti messaggi di errore... Corretti i messaggi di errore, ma controllate voi stessi la logica
Grazie mille uomo gentile!
La variabile int contiene esattamente il numero di secondi dal 1970, mentre la variabile datetime contiene la data.
Se avete bisogno di una certa barra nella storia, allora non importa come la specificate - per data o per numero di secondi, in ogni caso, la variabile indicherà il tempo di apertura di questa particolare barra, indipendentemente dall'arrivo di nuovi tick e dall'apertura di nuove barre.
Ho scoperto solo ora che la funzione stat viene ricalcolata se l'indicatore viene chiamato da un altro indicatore, quando entrambi sono sul grafico. Cioè, una volta viene calcolato per se stesso e la seconda volta per l'indicatore che lo chiama. Che cos'è?
Il seguente è mostrato nell'immagine. Il commento in alto è il valore del buffer nell'indicatore principale in cui avviene il calcolo, e la stampa (sotto) è lo stesso buffer, ma solo chiamato in un altro indicatore ed emesso nella stampa. La differenza è significativa, MA PERCHÉ!!!!!
il primo file è quello principale, il secondo richiama il buffer del primo....