[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 94
In particolare, qui if ( OrderType( )==OP_BUY && OrderType( )==OP_SELL )
Beh, ovviamente l'ordine può essere sia di acquisto che di vendita, ma metterei ||
LOL!!! Sì, l'ho fatto... Per davvero...
if (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)<0.5*Point)
Consiglio di chiarire chi è il punto e perché è moltiplicato per 0.5? È solo che la variante senza normalizzare il doppietto non è così affidabile se la si confronta con lo zero. Qui funziona.
Ticket è un tipo intero, OrderClose è booleano... Meglio non farlo in questo modo.
while loop è infinito e solo gli ordini di mercato vengono cancellati, se ce n'è uno in sospeso, questa musica sarà eterna. Grazie!!! !!!!
Sì, non so... Beh, continue;dovrebbe inviare al ciclo precedente, e probabilmente può passare fino a quando non corrisponde, a seconda di come è scritto.
Aiuto !!!!!!! (il mio post nella pagina precedente)!
//+------------------------------------------------------------------+//| AsctrendBuySellExpert_v1.mq4 code by Newdigital |//| https://www.forex-tsd.com |//| using Gordago software http://www.gordago.com |//| - Asctrend code for this EA was taken from |//| AscTrend_NonLag EA coded by of Igorad. |//| - "Non-Trading Hours" on the screen fixing code by Locutus |//| from Updated DayTradingMM EA |//+------------------------------------------------------------------+#property copyright "newdigital"#property link "https://www.forex-tsd.com"#include <stderror.mqh> // библиотека ошибок#include <stdlib.mqh>externint MAGIC = 100111;
externstring PARAMETERS_EXPERT = "PARAMETERS EXPERT";
externcolor clOpenBuy = Blue;
externcolor clCloseBuy = Aqua;
externcolor clOpenSell = Red;
externcolor clCloseSell = Violet;
externcolor clModiBuy = Blue;
externcolor clModiSell = Red;
externstring Name_Expert = "AsctrendBuySellExpert";
externbool UseSound = False;
externstring NameFileSound = "alert.wav";
externstring PARAMETERS_FILTER = "PARAMETERS FILTER";
externbool UseHourTrade = False;
externint FromHourTrade = 8;
externint ToHourTrade = 18;
externstring PARAMETERS_TRADE = "PARAMETERS TRADE";
externdouble Lots = 0.10;
externint Slippage = 4;
externdouble lStopLoss = 1000;
externdouble sStopLoss = 1000;
externdouble lTakeProfit = 1000;
externdouble sTakeProfit = 1000;
externdouble lTrailingStop = 1000;
externdouble sTrailingStop = 1000;
externstring PARAMETERS_INDICATOR_ONE = "ASCTrend";
externbool UseASCtrend = True;
externint RISK = 3;
int asctrend,asctrend1;
int ASCtrend,ASCtrend1;
void deinit() {
Comment("");
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int start(){
if (UseHourTrade){
if((Hour()>=FromHourTrade)&&(Hour()<=ToHourTrade))
Comment("Trading Hours");
else
{
Comment("Non-trading Hours");
return(0);
}
}
if(Bars<100){
Print("bars less than 100");
return(0);
}
if(lStopLoss<10){
Print("StopLoss less than 10");
return(0);
}
if(lTakeProfit<10){
Print("TakeProfit less than 10");
return(0);
}
if(sStopLoss<10){
Print("StopLoss less than 10");
return(0);
}
if(sTakeProfit<10){
Print("TakeProfit less than 10");
return(0);
}
if (UseASCtrend)
{
ASCtrend = ASCTrend(RISK);
bool ASCtrendBuy = ASCtrend>0 && ASCtrend1<0;
bool ASCtrendSell = ASCtrend<0 && ASCtrend1>0;
}
else {ASCtrendBuy = true; ASCtrendSell = true;}
if(AccountFreeMargin()<(1000*Lots)){
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (!ExistPositions()){
if ((ASCtrendBuy)){
OpenBuy();
return(0);
}
if ((ASCtrendSell)){
OpenSell();
return(0);
}
}
if (ExistPositions()){
if(OrderType()==OP_BUY){
if ((ASCtrendSell)){
CloseBuy();
return(0);
}
}
if(OrderType()==OP_SELL){
if ((ASCtrendBuy)){
CloseSell();
return(0);
}
}
}
TrailingPositionsBuy(lTrailingStop);
TrailingPositionsSell(sTrailingStop);
ASCtrend1=ASCtrend;
return (0);
}
bool ExistPositions() {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
return(True);
}
}
}
return(false);
}
void TrailingPositionsBuy(int trailingStop) {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
if (OrderType()==OP_BUY) {
if (Bid-OrderOpenPrice()>trailingStop*Point) {
if (OrderStopLoss()<Bid-trailingStop*Point)
ModifyStopLoss(Bid-trailingStop*Point);
}
}
}
}
}
}
void TrailingPositionsSell(int trailingStop) {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
if (OrderType()==OP_SELL) {
if (OrderOpenPrice()-Ask>trailingStop*Point) {
if (OrderStopLoss()>Ask+trailingStop*Point || OrderStopLoss()==0)
ModifyStopLoss(Ask+trailingStop*Point);
}
}
}
}
}
}
void ModifyStopLoss(double ldStopLoss) {
bool fm;
fm = OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
if (fm && UseSound) PlaySound(NameFileSound);
}
void CloseBuy() {
bool fc;
fc=OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clCloseBuy);
if (fc && UseSound) PlaySound(NameFileSound);
}
void CloseSell() {
bool fc;
fc=OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell);
if (fc && UseSound) PlaySound(NameFileSound);
}
void OpenBuy() {
double ldLot, ldStop, ldTake;
string lsComm;
ldLot = GetSizeLot();
ldStop = GetStopLossBuy();
ldTake = GetTakeProfitBuy();
lsComm = GetCommentForOrder();
BroCoOrderSend(Symbol(),OP_BUY,ldLot,Ask,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpenBuy);
if (UseSound) PlaySound(NameFileSound);
}
void OpenSell() {
double ldLot, ldStop, ldTake;
string lsComm;
ldLot = GetSizeLot();
ldStop = GetStopLossSell();
ldTake = GetTakeProfitSell();
lsComm = GetCommentForOrder();
BroCoOrderSend(Symbol(),OP_SELL,ldLot,Bid,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpenSell);
if (UseSound) PlaySound(NameFileSound);
}
string GetCommentForOrder() { return(Name_Expert); }
double GetSizeLot() { return(Lots); }
double GetStopLossBuy() { return (Bid-lStopLoss*Point);}
double GetStopLossSell() { return(Ask+sStopLoss*Point); }
double GetTakeProfitBuy() { return(Ask+lTakeProfit*Point); }
double GetTakeProfitSell() { return(Bid-sTakeProfit*Point); }
int ASCTrend( int risk )
{
double smin, smax, bsmin, bsmax;
int len = 3 + 2*risk;
smin=Low[Lowest(NULL,0,MODE_LOW,len,1)];
smax=High[Highest(NULL,0,MODE_HIGH,len,1)];
bsmax = smax-(smax - smin)*(33.0-risk)/100.0;
bsmin = smin+(smax - smin)*(33.0-risk)/100.0;
asctrend = asctrend1;
if(Close[1]>bsmax) asctrend= 1;
if(Close[1]<bsmin) asctrend=-1;
asctrend1 = asctrend;
return(asctrend);
}
//+------------------------------------------------------------------+//| Функция для работы с дилинговым центром BroCo |//+------------------------------------------------------------------+int BroCoOrderSend(string symbol,
int cmd,
double volume,
double price,
int slippage,
double stoploss,
double takeprofit,
string comment,
int magic,
datetime expiration,
color arrow_color)
{
int ticket = OrderSend(symbol,cmd, volume, price, slippage, 0, 0, comment, magic, expiration, arrow_color);
int check = -1;
if (ticket > 0 && (stoploss != 0 || takeprofit != 0)) {
if (!OrderModify(ticket, price, stoploss, takeprofit,expiration, arrow_color)) {
check = GetLastError();
if (check != ERR_NO_ERROR) {
Print("OrderModify error: ", ErrorDescription(check));
}
}
} else {
check = GetLastError();
if (check != ERR_NO_ERROR){
Print("OrderSend error: ",ErrorDescription(check));
}
}
return (ticket);
}
//----------------------------------------------------------------
Ciao a tutti! Mi sono imbattuto in un vecchio esperto che lavora con l'indicatore asctrend. Vorrei verificare come si comporta questo indicatore in tempo reale, ma non posso sempre seguire i punti e il mio trading non è completo. Ho controllato il tester, c'è un segnale in ogni punto, ma l'ho messo su una demo e ho notato la cosa che la demo salta i segnali, mentre il log non ha scritto nulla all'esperto, scavando nel codice e non ho capito quale sia il problema :( forse qualcuno mette il naso in quello che può essere il problema?
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
if (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)<0.5*Point) {
Alert("Позиция с тикетом #",OrderTicket()," закрыта по TakeProfit, закрываем остальные прозиции и удаляем отложенные ордера");
// Здесь код для закрытия всех открытых позиций (тоже в цикле)for ( int y=OrdersTotal()-1; y>=0; y--) {Alert ("Здесь код для закрытия всех открытых позиций (тоже в цикле)",y);
OrderSelect(y, SELECT_BY_POS );
if ( OrderType( )==OP_BUY || OrderType( )==OP_SELL ){
OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE);
Alert ("OrderClose-vse-2", GetLastError( ) ); C=0;A=1; }}
// Здесь код для удаления всех отложенных ордеров (также в цикле)for ( int f=OrdersTotal()-1; f>=0; f--) {Alert("Здесь код для удаления всех отложенных ордеров (также в цикле)",f);
OrderSelect(f, SELECT_BY_POS );
if ( OrderType( )==OP_BUYSTOP || OrderType( )==OP_SELLSTOP ){
OrderDelete(OrderTicket( )) ; Alert ("OrderDelete-vse-2", GetLastError( ) ); }} // CloseAll();
}
}
Ho scritto finora, e solo il primo messaggio di allarme è registrato
MetaEditor ha smesso di funzionare dopo aver reinstallato il terminale. Funziona solo se non si cambia nulla nel codice dell'indicatore. Se si cambia qualcosa, anche il colore della linea, si genera un errore:
Il sistema operativo è Windows 7. Chissà, forse qualcuno si è trovato di fronte a un simile inconveniente. Puoi dirmi cosa fare?
Codice lungo ragazzi! Vorrei ribadire che il codice di qualcun altro è prima di tutto un crittogramma, che deve ancora essere decifrato! E questo è un sacco di lavoro! Pensate che qualche programmatore voglia scavare tra chilometri di elenchi? Lasciate che dia il mio codice a uno di voi solo per tremila righe e chiedete di eliminare un piccolo malinteso di questo codice. Pensi di voler solo entrare nel mio cervello? Ne dubito ancora. Quindi ho una richiesta da farvi: quando fate una domanda chiave, descrivete il problema il più brevemente possibile e allo stesso tempo rendete la descrizione sufficiente per capirne l'essenza. Altrimenti il tuo grido è un grido nel vuoto. Il codice può essere allegato al post. Tutto questo è necessario e sufficiente.
Saluti a tutti!
Per favore, aiutatemi con questo problema: non riesco a far ridisegnare l'indicatore con la comparsa di una nuova barra (intervallo D). П
Devo riavviarlo manualmente.
è possibile scaricare l'indicatore dell'onda di zolliot
Certo che si può. Dovete trovare e scaricare
zlliot onda indicatore sito:mql4.com
Grazie, splxgf !!!!!!!!!!!!!!!
In particolare, qui if ( OrderType( )==OP_BUY && OrderType( )==OP_SELL )
Beh, ovviamente l'ordine può essere sia di acquisto che di vendita, ma metterei ||
LOL!!! Sì, l'ho fatto... Per davvero...
if (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)<0.5*Point)
Consiglio di chiarire chi è il punto e perché è moltiplicato per 0.5? È solo che la variante senza normalizzare il doppietto non è così affidabile se la si confronta con lo zero. Qui funziona.
Ticket è un tipo intero, OrderClose è booleano... Meglio non farlo in questo modo.
while loop è infinito e solo gli ordini di mercato vengono cancellati, se ce n'è uno in sospeso, questa musica sarà eterna. Grazie!!! !!!!
Ragazzi, ditemi la differenza ?????
se(OrderSymbol()!=Symbol())continua;
и
se(OrderSymbol()==Symbol())
???????????
Sì, non so... Beh, continue;dovrebbe inviare al ciclo precedente, e probabilmente può passare fino a quando non corrisponde, a seconda di come è scritto.
Aiuto !!!!!!! (il mio post nella pagina precedente)!
MetaEditor ha smesso di funzionare dopo aver reinstallato il terminale. Funziona solo se non si cambia nulla nel codice dell'indicatore. Se si cambia qualcosa, anche il colore della linea, si genera un errore:
Il sistema operativo è Windows 7. Chissà, forse qualcuno si è trovato di fronte a un simile inconveniente. Puoi dirmi cosa fare?