[Archive!] Any rookie question, so as not to clutter up the forum. Professionals, don't pass it by. Couldn't go anywhere without you - 2. - page 69
You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
Please, someone look at my previous post (on page 67). I can't find the error - pending orders are not being set.
There is no mistake. You should be more careful.
There is no mistake. You need to be more careful
No, no, no, no. You're looking at the wrong post. There is another one just below :)). The version you have checked does not specify the level from the current price (only the current price) at which the pendulum should be set. Thank you for your feedback.
No, no, no. You have looked at a wrong post. There is another one just below :)). The version you have checked does not show the level from the current price (it only shows the current price), at which the pendentive should be set. Thank you for your feedback.
Something with the OPENORDER() function call or the function itself.
It works like this
if (BUYSTOP)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0;
int error=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask + DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0);
}
Something with the OPENORDER() function call or the function itself.
It works like this
if (BUYSTOP)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0;
int error=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask + DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0);
}
Aaaaaaaaaaah!!! Computer gods!!! I've been over it ten times! Why isn't it working?! The main thing is the market opens. The pending ones are written on exactly the same principle. What's it missing? :)))))))
Please advise how to insert TrailingStopFrCnSAR_v2 into Expert Advisor, which is described in the tutorial?
How do I disable order tracking, so that it works when another EA puts a pending order or opens an order?
Urrrrrrra!!!!!!!! Found the bug!
If anyone's interested, here's a working version:
#property copyright "Copyright © 2010, Khlystov Vladimir"
#p
roperty link "cmillion@narod.ru"
#property show_inputs
//--------------------------------------------------------------------
extern int stoploss = 0; //level of SL exposition, if 0, SL is not exposed
extern int int takeprofit = 0; //t TP level, if 0, TP is not exhibited
extern int int Magic = 123456; //number of an order
extern bool BUY = false; //open BUY order
extern bool SELL = false; //open SELL order
extern bool BUYSTOP = false; //open BUYSTOP order
extern bool SELLSTOP = false; //open SELLSTOP order
extern double Lot = 0.1; // order volume
extern int slippage = 3; //maximal allowed price deviation for market orders
extern int DistanceSet = 20; //Market distance
//--------------------------------------------------------------------
double SL,TP;
//--------------------------------------------------------------------
int start()
{
if (BUY)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0;
OPENORDER ("Buy");
}
if (SELL)
{
if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits); else SL=0;
OPENORDER ("Sell");
}
if (BUYSTOP)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0;
OPENORDER ("Buy Stop");
}
if (SELLSTOP)
{
if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits); else SL=0;
OPENORDER ("Sell Stop");
}
return(0);
}
//--------------------------------------------------------------------
void OPENORDER(string ord)
{
int error,err;
while (true)
{ error=true;
if (ord=="Buy" ) error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,"",Magic,0);
if (ord=="Sell") error=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),slippage,SL,TP,",Magic,0);
if (ord=="Buy Stop" ) error=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask + DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0);
if (ord=="Sell Stop") error=OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid - DistanceSet*Point,Digits),slippage,SL,TP,",Magic,0);
if (error==-1) //failure
{
ShowERROR();
err++;Sleep(2000);RefreshRates();
}
if (error || err >10) return;
}
return;
}
//--------------------------------------------------------------------
void ShowERROR()
{
int err=GetLastError();
switch ( err )
{
case 1: return;
case 2: Alert("No connection to the trade server ",Symbol());return;
case 3: Alert("Error incorrect parameters ",Symbol());return;
case 130: Alert("Error close Ticket stops ",Symbol());return;
case 134: Alert("Not enough money ",Symbol());return;
case 146: Alert("Error Trade Subsystem is busy ",Symbol());return;
case 129: Alert("Error Wrong price ",Symbol());return;
case 131: Alert("Error Incorrect volume ",Symbol());return;
case 4200:Alert("Error Object already exists ",Symbol());return;
default: Alert("Error ",err," ",Symbol());return;
}
}
//--------------------------------------------------------------------
Thanks so much to everyone who took part in the discussion!!! Nowhere without you! :)))))
Urrrrrrra!!!!!!!! Found the mistake!
Huge thanks to everyone who took part in the discussion!!! Nowhere without you! :)))))
you still have an error in your code.
Remember: stops and takes in pending orders are not counted from the current price, but from the opening price of the order.
HELP! Please tell me, if I close part of a position (eg order for 1 lot, and close 0.5 lots) OrderClose ticket should change? My tester says it does... How to avoid it? Below is a piece of closing code...
1 2011.01.31 06:57 sell 1 2.55 1.36177 0.00000 0.00000 0.00 10000.00
2 2011.01.31 08:10 close 1 0.51 1.36039 0.00000 0.00000 70.38 10070.38
3 2011.01.31 08:10 sell 2 2.04 1.36177 0.00000 0.00000 0.0000 10070.38
4 2011.01.31 08:10 close 2 0.40 1.36038 0.00000 0.00000 55.60 10125.98
5 2011.01.31 08:10 sell 3 1.64 1.36177 0.00000 0.00000 0.00000 10125.98
Another question: I want to split my order into 4 parts and close each of them when Cls_S==true triggered. I tried to use counter... Doesn't work...
Can anyone give me an idea?
Thanks in advance!!!!
if (Tip==1 && ((Cls_S0==true&&TotClS==0)||(Cls_S1==true&&TotClS==1)
||(Cls_S2==true&&TotClS==2)||(Cls_S3==true&&TotClS==3)) // A Sell order is open.
{ // and there is a criterion to close it
Alert("Attempting to close 0.2 Lot Sell ",Ticket,". Waiting for reply...");
RefreshRates(); // Refresh data
Ans=OrderClose(Ticket,LotCt,Ask,5);
if (Ans==true) // It worked :)
{
TotClS++;
Alert ("Closed 0.2 Lot Sell ",Ticket);
break; // Exit from closed loop
}
if (Fun_Error(GetLastError())==1) // Error handling
continue; // Retry
return; // Exit from start()
}
break; // Exit while
I made a temporary drawing of flag[] buffer - it's empty, but why? Where is my error?
I've just corrected it a bit, so that it shows something.
- I put the indicator in a separate window, then you can put it back
- array macd[] was hanging in the air, made it an indicator, increased accuracy
- fixed your complex condition to open, put a simple one for adjustment
- changed the condition for the flag, so at least it works.
Then you can gradually introduce conditions, you will immediately see where the bug is.