Código:
#property copyright “Copyright c 2009, IndioriNosu”
#property link “https://www.efxto.com/”
#include
extern string Version = “Arquimedes”;
extern string Settings=”Settings”;
extern int Slippage = 5;
extern int StartHour = 0;
extern int EndHour = 24;
extern int Expiration = 24;
extern bool Account5Digits = false;
extern double TakeProfit =30;
extern double StopLoss = 30;
extern bool UseHiddenLevel=false;
extern int HiddenTP=50;
extern int HiddenStop=150;
extern bool UseTrailingStop = false;
extern int TrailingStart = 80;
extern int TrailingStop =100;
extern string MM = “Money Management”;
extern bool UseMoneyManagement=false;
extern bool UseMicroLots = true;
extern double MaximumRisk = 2.5;
extern string FixedLot = “Fixed Lots”;
extern double FixedLots = 0.01;
extern string SlowMA = “SlowMA Settings”;
extern int SlowMAPeriod = 18;
extern int SlowMAShift = 0;
extern int SlowMAMethod = 0;//0 Simple, 1 Exponencial, 2 Suavizada, 3 ponderacion lineal
extern int SlowMAApllyPrice = 0; //0 Close, 1 Open, 2 High, 3 Low, 4 Median, 5 Typical, 6 Weighted
extern string FastMA = “FastMA Settings”;
extern int FastMAPeriod = 9;4;
extern int FastMAShift = 0;
extern int FastMAMethod = 0;//0 Simple, 1 Exponencial, 2 Suavizada, 3 ponderada
extern int FastMAApllyPrice = 0; //0 Close, 1 Open, 2 High, 3 Low, 4 Median, 5 Typical, 6 Weighted
extern int MagicNumber = 123456;
int Kumo = 1;
int Number = 20;
bool var_748;
bool var_752;
bool var_756;
bool var_760;
int var_764;
int Arko;
int var_772;
double SlowMA2;
double SlowMA1;
double FastMA2;
double FastMA1;
string var_792 = “a”;
int var_800 = 0;
double var_804;
bool var_812 = false;
bool var_816 = false;
bool var_820 = false;
bool var_824 = false;
bool var_828 = false;
bool var_832 = false;
bool var_836 = false;
bool var_840 = false;
bool var_844 = false;
bool var_848 = false;
int var_852;
int var_856;
int var_860;
bool var_864 = false;
int var_868;
int var_872;
int var_876;
bool var_880 = false;
int var_884;
int var_888;
int var_892;
bool var_896 = false;
int var_900;
bool var_904 = false;
double MyPoint=0;
//+
+
void start()
{
bool tradeallowed=IsTradeAllowed();
if(!tradeallowed){
Print(“Trade not allowed”);
}
bool contextbusy=IsTradeContextBusy();
if (contextbusy){
Print(“Trade context is busy”);
}
if (MyPoint == 0.0)
{
MyPoint = Point;
if (Account5Digits) MyPoint *= 10;
}
if (UseHiddenLevel==true){
Hidden();
}
int hour = Hour();
if (hour == Expiration) Limpiar();
if ((hour>=StartHour) && (hour
{
BuscarSenal();
if (BuscarOrdenes() != 0) BuscarCierre(); else BuscarAbrir();
if (BuscarOrdenes() != 0)
{
if (UseTrailingStop == true) TrailStop();
}
}
Commenting();
}
//+
+
double LotsRisk(int sl)
{
if (UseMicroLots == false)
{
if (!UseMoneyManagement)
{
var_804 = NormalizeDouble(FixedLots,1);
if (var_804 < 0.1) var_804 = 0.1;
if (Kumo == 1) Print(“Position lot size: ” + var_804);
}
if (UseMoneyManagement)
{
var_804 = NormalizeDouble(AccountFreeMargin() * MaximumRisk / 1000.0 / sl,1);
if (var_804 < 0.1) var_804 = 0.1;
if (Kumo == 1) Print(“Position lot size: ” + var_804);
}
}
if (UseMicroLots == true)
{
if (!UseMoneyManagement)
{
var_804 = NormalizeDouble(FixedLots,2);
if (var_804 < 0.01) var_804 = 0.01;
if (Kumo == 1) Print(“Position lot size: ” + var_804);
}
if (UseMoneyManagement)
{
var_804 = NormalizeDouble(AccountFreeMargin() * MaximumRisk / 1000.0 / sl,2);
if (var_804 < 0.01) var_804 = 0.01;
if (Kumo == 1) Print(“Position lot size: ” + var_804);
}
}
return(var_804);
}
//+
+
int BuscarOrdenes()
{
int buy_cnt = 0;
int sell_cnt = 0;
for (int i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) break;
if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == MagicNumber))
{
if (OrderType() == OP_BUY) buy_cnt++;
if (OrderType() == OP_SELL) sell_cnt++;
}
}
if (buy_cnt > 0) return(buy_cnt); else return(-sell_cnt);
}
//+
+
void BuscarSenal()
{
if (var_772 != Time[0])
{
var_772 = Time[0];
SlowMA2 = iMA(NULL,0,SlowMAPeriod,SlowMAShift,SlowMAMethod,SlowMAApllyPrice,2);
SlowMA1 = iMA(NULL,0,SlowMAPeriod,SlowMAShift,SlowMAMethod,SlowMAApllyPrice,1);
FastMA2 = iMA(NULL,0,FastMAPeriod,FastMAShift,FastMAMethod,FastMAApllyPrice,2);
FastMA1 = iMA(NULL,0,FastMAPeriod,FastMAShift,FastMAMethod,FastMAApllyPrice,1);
FastMA2 = iMA(NULL,0,FastMAPeriod,FastMAShift,FastMAMethod,FastMAApllyPrice,2);
FastMA1 = iMA(NULL,0,FastMAPeriod,FastMAShift,FastMAMethod,FastMAApllyPrice,1);
var_752 = false;
var_748 = false;
if (FastMA1>=SlowMA1)&(FastMA2>=SlowMA1) var_748 = true;
if (FastMA1< =SlowMA1)&(FastMA2<=SlowMA1) var_752 = true;var_760 = var_748;
var_756 = var_752;
if (var_760 || var_756) return;
if (BuscarOrdenes() != 0)
{
var_760 = false;
var_756 = false;
}
}
//+
+
void BuscarAbrir()………..AKI ME PONE EL UNICO ERROR!
{
if(var_752)
{
if (Kumo == 1) Print(“SELL signal”);
int ticket = 0;
Arko = 0;
while ((ticket < = 0) && (Arko < Number))
{
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
ticket = OrderSend(Symbol(),OP_SELL,LotsRisk(StopLoss),Bid,Slippage,Bid + StopLoss * MyPoint,Bid – TakeProfit * MyPoint,Version,MagicNumber,0,Red);
if (ticket < 0)
{
Print(“Error opening SELL order! “,ErrorDescription(GetLastError()));
Arko++;
}
}
}
else
{
if (var_748)
{
if (Kumo == 1) Print(“BUY signal”);
ticket = 0;
Arko = 0;
while ((ticket < = 0) && (Arko < Number))
{
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
ticket = OrderSend(Symbol(),OP_BUY,LotsRisk(StopLoss),Ask,Slippage,Ask – StopLoss * MyPoint,Ask + TakeProfit * MyPoint,Version,MagicNumber,0,Blue);
if (ticket < 0)
{
Print(“Error opening BUY order! “,ErrorDescription(GetLastError()));
Arko++;
}
}
}
}
//+
+
void BuscarCierre()
{
bool result;
for (int i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false)
{
break;
}
if ((OrderMagicNumber() != MagicNumber) || (OrderSymbol() != Symbol()))
{
continue;
}
if (OrderType() == OP_BUY)
{
if (var_756)
{
result = false;
Arko = 0;
if (Kumo == 1) Print(“Trying to close Buy position.”);
while (!result && (Arko < Number))
{
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
result = OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Gold);
if (!result)
{
Print(“Error closing BUY order try #” + Arko + ” ” + ErrorDescription(GetLastError()));
Arko++;
}
if (result) var_800 = 0;
}
}
break;
}
if (OrderType() == OP_SELL)
{
if (var_760)
{
result = false;
Arko = 0;
if (Kumo == 1) Print(“Trying to close Sell position.”);
while (!result && (Arko < Number))
{
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
result = OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Gold);
if (result) var_800 = 0;
if (!result)
{
Print(“Error closing SELL order try #” + Arko + ” ” + ErrorDescription(GetLastError()));
Arko++;
}
}
}
break;
}
}
}
//+
+
void TrailStop()
{
bool result;
double sl;
Arko = 0;
if (TrailingStart > 2)
{
for (int i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS) == false) continue;
if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber)) continue;
if (OrderType() == OP_BUY)
{
if (Bid < OrderOpenPrice() + TrailingStart * MyPoint) continue;
var_800 = 1;
sl = Bid – TrailingStop * MyPoint;
if (sl > OrderStopLoss())
{
if (Kumo == 1) Print(“TrailingStop modifying open position.”);
while (!result && (Arko < Number))
{
RefreshRates();
result = OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Gold);
if (!result)
{
Print(“Error modifying BUY order try #” + Arko + ” ” + ErrorDescription(GetLastError()));
Arko++;
}
}
}
}
if (OrderType() == OP_SELL)
{
if (Ask > OrderOpenPrice() – TrailingStart * MyPoint) continue;
var_800 = 1;
sl = Ask + TrailingStop * MyPoint;
if (sl < OrderStopLoss())
{
if (Kumo == 1) Print(“TrailingStop modifying open position.”);
while (!result && (Arko < Number))
{
RefreshRates();
result = OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Gold);
if (!result)
{
Print(“Error modifying SELL order try #” + Arko + ” ” + ErrorDescription(GetLastError()));
Arko++;
}
}
}
}
}
}
}
//+
+
void Hidden(){
for (int i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS) == false) continue;
if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber)) continue;
if (OrderType() == OP_BUY){
if ((Bid>OrderOpenPrice()+HiddenTP*MyPoint) || (Bid< =OrderOpenPrice()-HiddenStop*MyPoint)){
Limpiar();
}
}
if (OrderType()==OP_SELL){
if ((Ask< =OrderOpenPrice()-HiddenTP*MyPoint) || (Ask>=OrderOpenPrice()+HiddenStop*MyPoint)){
Limpiar();
}
}
}
}
void Limpiar()
{
bool result;
Arko = 0;
for (int i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS) == 0) continue;
if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber)) continue;
if (OrderType() == OP_BUY)
{
result = 0;
Arko = 0;
if (Kumo == 1) Print(“Trying to close trade.”);
while (!result && (Arko < Number))
{
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
result = OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Gold);
if (!result)
{
Print(“Error closing BUY order try #” + Arko + ” ” + ErrorDescription(GetLastError()));
Arko++;
}
}
break;
}
if (OrderType() == OP_SELL)
{
result = 0;
Arko = 0;
if (Kumo == 1) Print(“Trying to close trade.”);
while (!result && (Arko < Number))
{
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
result = OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Gold);
if (!result)
{
Print(“Error closing SELL order try #” + Arko + ” ” + ErrorDescription(GetLastError()));
Arko++;
}
}
break;
}
}
}
void Commenting()
{
if (Kumo == 1) Comment(“nArquímedes Expert Advisor n http://www.efxto.comnn“, AccountCompany(),”nAccount Number: “, AccountNumber(), “nName: “, AccountName(), “nServer: “, AccountServer(),”nBalance: “, AccountBalance(),”nPar: “, Symbol(),”nSpread: “, MarketInfo(Symbol(),MODE_SPREAD));
}