import java.util.*;
import com.dukascopy.api.*;

// Pavadinimas
public class sarceb implements IStrategy { 

private IEngine engine;
private IConsole console;
private IHistory history;
private IContext context;
private IIndicators indicators;
private IUserInterface userInterface;
private IAccount account;

// Visi parametrai
public Instrument instrumentas = Instrument.GBPJPY;
public Period periodas = Period.ONE_HOUR;        
public double dydis;
public double pelnas = 1000;
public double nuostolis = 1000;
public double slydimas = 5;
public double tikslas = 180000;
private boolean leidziama;


// Belekas
public void onStart(IContext context) throws JFException {
this.engine = context.getEngine();
this.indicators = context.getIndicators();
this.console = context.getConsole();
this.history = context.getHistory();        
this.context = context;
this.userInterface = context.getUserInterface();                   
}
public void onAccount(IAccount account) throws JFException {
this.account = account;

// Viena pozicija vienu metu
if (account.getUseOfLeverage() == 0) { leidziama = true;
} else leidziama = false;
}
public void onStop() throws JFException {
}

// Pagrindinis
public void onTick(Instrument instrument, ITick tick) throws JFException {
    
// Musu instrumentas   
if (instrument != instrumentas) return;

// Indikatoriai
double vidurkis1 = indicators.sma(instrument, periodas, OfferSide.BID, IIndicators.AppliedPrice.MEDIAN_PRICE, 3, 0);     
double vidurkis2 = indicators.sma(instrument, periodas, OfferSide.BID, IIndicators.AppliedPrice.MEDIAN_PRICE, 12, 0);
double vidurkis3 = indicators.sma(instrument, periodas, OfferSide.BID, IIndicators.AppliedPrice.MEDIAN_PRICE, 27, 0);

// pelno - nuostolio uzdejimui
int pozicija=0;       
double verte = instrument.getPipValue();        
for (IOrder order : engine.getOrders(instrument)) {
if (order.getState() == IOrder.State.FILLED) {
if (order.isLong())  pozicija=1;                                 
else                 pozicija=-1; 

// pelnas - nuostolis                                                                                              
if (nuostolis>0 && order.getStopLossPrice()==0)   order.setStopLossPrice(order.getOpenPrice() - pozicija*verte*nuostolis);                
if (pelnas>0    && order.getTakeProfitPrice()==0) order.setTakeProfitPrice(order.getOpenPrice() + pozicija*verte*pelnas);

// esamu poziciju uzdarymas
if (order.isLong() && vidurkis1>vidurkis2) order.close();
if (order.isLong() && vidurkis2<vidurkis3) order.close();
if (order.isLong()==false && vidurkis1<vidurkis2) order.close();
if (order.isLong()==false && vidurkis2>vidurkis3) order.close();
}    
} 

// Kapitalo apsauga                  
if (pozicija==0) {
double kapitalas = this.account.getEquity();            
if (kapitalas<tikslas) { dydis = 3; }  
else dydis=0.005;      

// Butina          
if (vidurkis1 <= 0 || vidurkis2 <= 0 || vidurkis3 <= 0) return;
// Iejimo taisykles     
if (vidurkis2>vidurkis3 && vidurkis1<vidurkis2 && leidziama==true)  engine.submitOrder("Perku", instrument, IEngine.OrderCommand.BUY, dydis, 0, slydimas);              
if (vidurkis2<vidurkis3 && vidurkis1>vidurkis2 && leidziama==true)  engine.submitOrder("Parduodu", instrument, IEngine.OrderCommand.SELL, dydis, 0, slydimas);       
}
}
public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {
}
public void onMessage(IMessage message) throws JFException {
}
}