def MACD(code, day1, day2, day3): DIF = EMA(code, day1) - EMA(code, day2) DEM = EMA(code, day3) for i in range(1, len(DIF)): DEM.iloc[i] = DIF.iloc[i] * 2 / (day3+1) + DEM.iloc[i-1] * (day3-1) / (day3+1) OSC = (DIF - DEM) * 2 plt.bar(list(OSC.index), list(OSC['close'])) return OSC
def minToMaxIteration(minVM, maxVM, currentVM, machine_unit_power,machine_unit_price, predicted_arr, time_gap ): yvalueset = [] predicted_arr_temp = predicted_arr[np.logical_not(np.isnan(predicted_arr))] line2d= Line2D(np.arange(1,len(predicted_arr_temp),1), EMA.ema(predicted_arr_temp ,3)) #print("Max : %s" %max(line2d.get_xdata())) sampling_distance = 0.2 for i in drange(min(line2d.get_xdata()), max(line2d.get_xdata()), sampling_distance): #print(i-uptime) z = getValue(line2d, i) yvalueset.append(z[0]) predicted_arr2 = np.array(yvalueset) #print("yvaluse : %s" %yvalueset) tot_cost = 999999 #print(predicted_arr2) time = sampling_distance * len(predicted_arr2)/60.0 # print(time) index = minVM violation_selected = 0 for i in range(minVM, maxVM+1): precentage = violation_precentage(i,machine_unit_power,predicted_arr2) cost = i*machine_unit_price*time + i*machine_unit_price*time*SLA_func(precentage) print("VM: %d Cost: %d, Violation : %d" %(i, cost, precentage)) if i == minVM and precentage > 30: i = currentVM if cost < tot_cost : tot_cost = cost index = i violation_selected = precentage if precentage == 0: break return index, violation_selected
def MACD(hist_data, period): count = hist_data['Open'].count() data = pandas.DataFrame( numpy.zeros(count * 6).reshape(count, 6), index=hist_data.index, columns=['EMA1', 'EMA2', 'DIF', 'DEA', 'MACD', 'MACD_s']) data['EMA1'] = EMA.EMA(hist_data, EMA1_fast)['EMA'] data['EMA2'] = EMA.EMA(hist_data, EMA2_slow)['EMA'] data['DIF'] = data['EMA1'] - data['EMA2'] #replace 'Adj Close' with 'DIF' to reuse EMA function hist_data['Adj Close'] = data['DIF'] data['DEA'] = EMA.EMA(hist_data, DEA_period)['EMA'] data['MACD'] = 2 * (data['DIF'] - data['DEA']) for i in range(count): data['MACD_s'][i] = 1 if data['DIF'][i] > data['DIF'][i - 1] else 0 return data
def minToMaxIteration(minVM, maxVM, currentVM, machine_unit_power, machine_unit_price, predicted_arr, time_gap): yvalueset = [] predicted_arr_temp = predicted_arr[np.logical_not(np.isnan(predicted_arr))] line2d = Line2D(np.arange(1, len(predicted_arr_temp), 1), EMA.ema(predicted_arr_temp, 3)) #print("Max : %s" %max(line2d.get_xdata())) sampling_distance = 0.2 for i in drange(min(line2d.get_xdata()), max(line2d.get_xdata()), sampling_distance): #print(i-uptime) z = getValue(line2d, i) yvalueset.append(z[0]) predicted_arr2 = np.array(yvalueset) #print("yvaluse : %s" %yvalueset) tot_cost = 999999 #print(predicted_arr2) time = sampling_distance * len(predicted_arr2) / 60.0 # print(time) index = minVM violation_selected = 0 for i in range(minVM, maxVM + 1): precentage = violation_precentage(i, machine_unit_power, predicted_arr2) cost = i * machine_unit_price * time + i * machine_unit_price * time * SLA_func( precentage) print("VM: %d Cost: %d, Violation : %d" % (i, cost, precentage)) if i == minVM and precentage > 30: i = currentVM if cost < tot_cost: tot_cost = cost index = i violation_selected = precentage if precentage == 0: break return index, violation_selected
def calculate_stock_signal_new(hist_data): count = hist_data['Open'].count() all_data = hist_data.join(KDJ2.KDJ(hist_data, period)).join( RSI2.RSI(hist_data, period)).join(ForceIndex2.FI(hist_data, period)).join( EMA.EMA(hist_data, period)) all_data = all_data.join(adj_close_signal_new(hist_data)) data = pandas.DataFrame( numpy.zeros(hist_data['Open'].count() * 5).reshape(count, 5), index=hist_data.index, columns=['signal', 'price', 'buy', 'sell', 'profit']) for i in range(count): data['price'][i] = all_data['Adj Close'][i] sum = all_data['KDJ_s'][i] + all_data['RSI_s'][i] + all_data['FI_s'][i] if sum > 2: if data['signal'].sum() > 0: continue data['signal'][i] = 1 data['buy'][i] = all_data['Adj Close'][i] elif data['signal'].sum() > 0: if all_data['FI_s'][i] > 0: continue elif (all_data['EMA_s'][i] + all_data['close_s'][i]) > 0: continue else: data['sell'][i] = all_data['Adj Close'][i] j = i - 1 while data['signal'][j] < 0.1: j = j - 1 data['profit'][i] = (data['sell'][i] - data['buy'][j]) / data['buy'][j] data['signal'][i] = -1 return all_data.join(data)
def run(VM_parameter_unit, threshold_percentage, uptime, min_VM, shift, provider, prediction_type, vm_price_per_hour, vm_init_data, actualFileName, scaleFileName, costFileName): listVM = list() open(scaleFileName, 'w').close() open(costFileName, 'w').close() scaleCSV = open(scaleFileName,"rw+") costCSV = open(costFileName,"rw+") scaleCSV.write("Time,VM Count\n" ) costCSV.write( "Time,Total Cost\n" ) #print(provider) digix_cordinates = array.array('d') digiy_cordinates = array.array('d') x_coordinates = array.array('d') y_coordinates = array.array('d') digiy_coord_actual = array.array('d') modely_coord_actual = array.array('d') #Read vlaues while converting to VM_UNITS ifile = open(actualFileName, "rb") reader = csv.reader(ifile) rownum = 0 for row in reader: x_coordinates.append(float(row[0])) y_coordinates.append(float(row[1])/(VM_parameter_unit)) rownum += 1 ifile.close() ##print(x_coordinates) ##print(y_coordinates) # Regression xdata = np.array(x_coordinates) ydata = np.array(y_coordinates) #Plot row data rowdata = Line2D(xdata, ydata) #plot regression line of data #plt1.plot(xdata, quad(xdata,popt[0],popt[1],popt[2], popt[3]), '-') #plot EMA line2d = Line2D(xdata, EMA.ema(ydata ,3)) #plot stratos line2d_stratos = Line2D(xdata[2:len(xdata)]+1,Stratos.Stratos(ydata)) #Initialize min_VMs #VM = [23,42] #Todo fill with randoms for j in range(0, min_VM): # id = randint(1,999) t = vm_init_data[j]#take this as arg? vm = VM(initTime=-t, endTime=-1) listVM.append(vm) #Plot number of VMs required vm_count = min_VM yvalueset = [] if(provider == "default" and prediction_type == "reactive"): for i in drange(uptime, max(xdata) - shift + uptime- 1, 0.1): #print(i-uptime) z = getValue(line2d, i - uptime) yvalueset.append(z) ##print(z) new_vm_count = math.ceil(z/threshold_percentage) if new_vm_count < min_VM: new_vm_count = min_VM vm_change = int(math.ceil(new_vm_count - vm_count)) if vm_change > 0: vm_count += startVMs(listVM, vm_change, i) elif vm_change < 0: vm_count -= removeVMs(listVM, -vm_change, provider, i) digix_cordinates.append(i) digiy_cordinates.append(new_vm_count) digiy_coord_actual.append(vm_count) scaleCSV.seek(0, 2) scaleCSV.write("%.3f,%.3f\n" %(i, vm_count*VM_parameter_unit)) digixdata = np.array(digix_cordinates) digiydata = np.array(digiy_cordinates) actualydata = np.array(digiy_coord_actual) lineAllocate = Line2D(digixdata, digiydata) #requirement digi_line = Line2D(digixdata, actualydata) #actual elif(provider == "default" and prediction_type == "stratos"): request_count = 0 sampling_distance = 0.1 for i in drange(uptime, max(xdata) - shift + uptime -4, sampling_distance): print(i) line2d = line2d_stratos z = getValue(line2d_stratos, i - uptime) yvalueset.append(z) ##print(z) new_vm_count = math.ceil(z/threshold_percentage) if new_vm_count < min_VM: new_vm_count = min_VM vm_change = int(math.ceil(new_vm_count - vm_count)) if vm_change > 0: vm_count += startVMs(listVM, vm_change, i) request_count = 0 elif vm_change < 0: request_count += 1 if request_count > 2.0/sampling_distance : vm_count -= removeVMs(listVM, -vm_change, provider, i) request_count = 0 digix_cordinates.append(i) digiy_cordinates.append(new_vm_count) digiy_coord_actual.append(vm_count) scaleCSV.seek(0, 2) scaleCSV.write("%.3f,%.3f\n" %(i, vm_count*VM_parameter_unit)) digixdata = np.array(digix_cordinates) digiydata = np.array(digiy_cordinates) actualydata = np.array(digiy_coord_actual) lineAllocate = Line2D(digixdata, digiydata) #requirement digi_line = Line2D(digixdata+4, actualydata) #actual elif(provider == "aws" and prediction_type == "stratos"): request_count = 0 sampling_distance = 0.1 for i in drange(uptime, max(xdata) - shift + uptime -4, 0.1): print(i) line2d = line2d_stratos z = getValue(line2d, i - uptime) yvalueset.append(z) ##print(z) new_vm_count = math.ceil(z/threshold_percentage) if new_vm_count < min_VM: new_vm_count = min_VM vm_change = int(math.ceil(new_vm_count - vm_count)) if vm_change > 0: vm_count += startVMs(listVM, vm_change, i) request_count = 0 elif vm_change < 0: request_count += 1 if request_count > 2.0/sampling_distance: vm_count -= removeVMs(listVM, -vm_change, provider, i) digix_cordinates.append(i) digiy_cordinates.append(new_vm_count) digiy_coord_actual.append(vm_count) scaleCSV.seek(0, 2) scaleCSV.write("%.3f,%.3f\n" %(i, vm_count*VM_parameter_unit)) digixdata = np.array(digix_cordinates) digiydata = np.array(digiy_cordinates) actualydata = np.array(digiy_coord_actual) lineAllocate = Line2D(digixdata, digiydata) #requirement digi_line = Line2D(digixdata+4, actualydata) #actual elif(provider == "aws" and prediction_type == "reactive"): for i in drange(uptime, max(xdata) - shift + uptime- 1, 0.1): #print(i-uptime) z = getValue(line2d, i - uptime) yvalueset.append(z) ##print(z) new_vm_count = math.ceil(z/threshold_percentage) if new_vm_count < min_VM: new_vm_count = min_VM vm_change = int(math.ceil(new_vm_count - vm_count)) if vm_change > 0: vm_count += startVMs(listVM, vm_change, i) elif vm_change < 0: vm_count -= removeVMs(listVM, -vm_change, provider, i) digix_cordinates.append(i) digiy_cordinates.append(new_vm_count) digiy_coord_actual.append(vm_count) scaleCSV.seek(0, 2) scaleCSV.write("%.3f,%.3f\n" %(i, vm_count*VM_parameter_unit)) digixdata = np.array(digix_cordinates) digiydata = np.array(digiy_cordinates) actualydata = np.array(digiy_coord_actual) lineAllocate = Line2D(digixdata, digiydata) #requirement digi_line = Line2D(digixdata, actualydata) #actual elif(provider == "default" and prediction_type == "proactive"): digix, digiy = CostModel.run(actualFileName) for i in range(0, len(digix)): new_vm_count = digiy[i] if i != 0: vm_change = int(math.ceil(digiy[i] - len([i for x in listVM if x.endTime == -1]))) else : vm_change = int(math.ceil(digiy[0] - len([i for x in listVM if x.endTime == -1]))) if vm_change > 0: vm_count += startVMs(listVM, vm_change, digix[i]) elif vm_change < 0: vm_count -= removeVMs(listVM, -vm_change, provider, digix[i]) modely_coord_actual.append(vm_count) scaleCSV.seek(0, 2) scaleCSV.write("%.3f,%.3f\n" %(i, vm_count*VM_parameter_unit)) digixdata = np.array(digix) digiydata = np.array(digiy) lineAllocate = Line2D(digixdata, digiydata) #requirement digi_line = Line2D(digixdata, modely_coord_actual) #actual elif(provider == "aws" and prediction_type == "proactive"): digix, digiy = CostModel.run(actualFileName) #print(digix) #print(digiy) for i in range(0, len(digix)): new_vm_count = digiy[i] if i != 0: vm_change = int(math.ceil(digiy[i] - len([i for x in listVM if x.endTime == -1]))) else : vm_change = int(math.ceil(digiy[0] - len([i for x in listVM if x.endTime == -1]))) if vm_change > 0: vm_count += startVMs(listVM, vm_change, digix[i]) elif vm_change < 0: vm_count -= removeVMs(listVM, -vm_change, provider, digix[i]) modely_coord_actual.append(vm_count) scaleCSV.seek(0, 2) scaleCSV.write("%.3f,%.3f\n" %(i, vm_count*VM_parameter_unit)) digixdata = np.array(digix) digiydata = np.array(digiy) lineAllocate = Line2D(digixdata, digiydata) #requirement digi_line = Line2D(digixdata, modely_coord_actual) #actual #for vm in listVM: #print("VM_id %3s: %5.1f - %5.1f = %5.1f%s" % (vm.id, vm.initTime, vm.endTime,(vm.endTime if vm.endTime > 0 else i) - vm.initTime, ("" if vm.endTime > 0 else " up"))) costValues = array.array('d') for k in drange(0, max(xdata), 1): cost = calculateAWSCost(listVM, k, vm_price_per_hour) costValues.append(cost) costCSV.seek(0, 2) costCSV.write("%.3f,%.3f\n" %(k,cost)) costydata = np.array(costValues) costxdata = np.arange(0, max(xdata), 1) cost_line = Line2D(costxdata,costydata) yvalues = np.array(yvalueset) #e = mse(digiydata, yvalues) start = max(min(line2d.get_xdata()), min(lineAllocate.get_xdata())) end = min(max(line2d.get_xdata()), max(lineAllocate.get_xdata())); #calculateViolation(predictLine=line2d, allocateline=lineAllocate, startTime= start , endTime= end) return rowdata, line2d, digi_line,cost_line
def EMA_signal(hist_data): data = EMA.EMA(hist_data, 13) return 1 if data['EMA'][count - 1] > data['EMA'][count - 2] else 0
def run(VM_parameter_unit, threshold_percentage, uptime, min_VM, shift, provider, prediction_type, vm_price_per_hour, vm_init_data, actualFileName, scaleFileName, costFileName): listVM = list() open(scaleFileName, 'w').close() open(costFileName, 'w').close() scaleCSV = open(scaleFileName, "rw+") costCSV = open(costFileName, "rw+") scaleCSV.write("Time,VM Count\n") costCSV.write("Time,Total Cost\n") #print(provider) digix_cordinates = array.array('d') digiy_cordinates = array.array('d') x_coordinates = array.array('d') y_coordinates = array.array('d') digiy_coord_actual = array.array('d') modely_coord_actual = array.array('d') #Read vlaues while converting to VM_UNITS ifile = open(actualFileName, "rb") reader = csv.reader(ifile) rownum = 0 for row in reader: x_coordinates.append(float(row[0])) y_coordinates.append(float(row[1]) / (VM_parameter_unit)) rownum += 1 ifile.close() ##print(x_coordinates) ##print(y_coordinates) # Regression xdata = np.array(x_coordinates) ydata = np.array(y_coordinates) #Plot row data rowdata = Line2D(xdata, ydata) #plot regression line of data #plt1.plot(xdata, quad(xdata,popt[0],popt[1],popt[2], popt[3]), '-') #plot EMA line2d = Line2D(xdata, EMA.ema(ydata, 3)) #plot stratos line2d_stratos = Line2D(xdata[2:len(xdata)] + 1, Stratos.Stratos(ydata)) #Initialize min_VMs #VM = [23,42] #Todo fill with randoms for j in range(0, min_VM): # id = randint(1,999) t = vm_init_data[j] #take this as arg? vm = VM(initTime=-t, endTime=-1) listVM.append(vm) #Plot number of VMs required vm_count = min_VM yvalueset = [] if (provider == "default" and prediction_type == "reactive"): for i in drange(uptime, max(xdata) - shift + uptime - 1, 0.1): #print(i-uptime) z = getValue(line2d, i - uptime) yvalueset.append(z) ##print(z) new_vm_count = math.ceil(z / threshold_percentage) if new_vm_count < min_VM: new_vm_count = min_VM vm_change = int(math.ceil(new_vm_count - vm_count)) if vm_change > 0: vm_count += startVMs(listVM, vm_change, i) elif vm_change < 0: vm_count -= removeVMs(listVM, -vm_change, provider, i) digix_cordinates.append(i) digiy_cordinates.append(new_vm_count) digiy_coord_actual.append(vm_count) scaleCSV.seek(0, 2) scaleCSV.write("%.3f,%.3f\n" % (i, vm_count * VM_parameter_unit)) digixdata = np.array(digix_cordinates) digiydata = np.array(digiy_cordinates) actualydata = np.array(digiy_coord_actual) lineAllocate = Line2D(digixdata, digiydata) #requirement digi_line = Line2D(digixdata, actualydata) #actual elif (provider == "default" and prediction_type == "stratos"): request_count = 0 sampling_distance = 0.1 for i in drange(uptime, max(xdata) - shift + uptime - 4, sampling_distance): print(i) line2d = line2d_stratos z = getValue(line2d_stratos, i - uptime) yvalueset.append(z) ##print(z) new_vm_count = math.ceil(z / threshold_percentage) if new_vm_count < min_VM: new_vm_count = min_VM vm_change = int(math.ceil(new_vm_count - vm_count)) if vm_change > 0: vm_count += startVMs(listVM, vm_change, i) request_count = 0 elif vm_change < 0: request_count += 1 if request_count > 2.0 / sampling_distance: vm_count -= removeVMs(listVM, -vm_change, provider, i) request_count = 0 digix_cordinates.append(i) digiy_cordinates.append(new_vm_count) digiy_coord_actual.append(vm_count) scaleCSV.seek(0, 2) scaleCSV.write("%.3f,%.3f\n" % (i, vm_count * VM_parameter_unit)) digixdata = np.array(digix_cordinates) digiydata = np.array(digiy_cordinates) actualydata = np.array(digiy_coord_actual) lineAllocate = Line2D(digixdata, digiydata) #requirement digi_line = Line2D(digixdata + 4, actualydata) #actual elif (provider == "aws" and prediction_type == "stratos"): request_count = 0 sampling_distance = 0.1 for i in drange(uptime, max(xdata) - shift + uptime - 4, 0.1): print(i) line2d = line2d_stratos z = getValue(line2d, i - uptime) yvalueset.append(z) ##print(z) new_vm_count = math.ceil(z / threshold_percentage) if new_vm_count < min_VM: new_vm_count = min_VM vm_change = int(math.ceil(new_vm_count - vm_count)) if vm_change > 0: vm_count += startVMs(listVM, vm_change, i) request_count = 0 elif vm_change < 0: request_count += 1 if request_count > 2.0 / sampling_distance: vm_count -= removeVMs(listVM, -vm_change, provider, i) digix_cordinates.append(i) digiy_cordinates.append(new_vm_count) digiy_coord_actual.append(vm_count) scaleCSV.seek(0, 2) scaleCSV.write("%.3f,%.3f\n" % (i, vm_count * VM_parameter_unit)) digixdata = np.array(digix_cordinates) digiydata = np.array(digiy_cordinates) actualydata = np.array(digiy_coord_actual) lineAllocate = Line2D(digixdata, digiydata) #requirement digi_line = Line2D(digixdata + 4, actualydata) #actual elif (provider == "aws" and prediction_type == "reactive"): for i in drange(uptime, max(xdata) - shift + uptime - 1, 0.1): #print(i-uptime) z = getValue(line2d, i - uptime) yvalueset.append(z) ##print(z) new_vm_count = math.ceil(z / threshold_percentage) if new_vm_count < min_VM: new_vm_count = min_VM vm_change = int(math.ceil(new_vm_count - vm_count)) if vm_change > 0: vm_count += startVMs(listVM, vm_change, i) elif vm_change < 0: vm_count -= removeVMs(listVM, -vm_change, provider, i) digix_cordinates.append(i) digiy_cordinates.append(new_vm_count) digiy_coord_actual.append(vm_count) scaleCSV.seek(0, 2) scaleCSV.write("%.3f,%.3f\n" % (i, vm_count * VM_parameter_unit)) digixdata = np.array(digix_cordinates) digiydata = np.array(digiy_cordinates) actualydata = np.array(digiy_coord_actual) lineAllocate = Line2D(digixdata, digiydata) #requirement digi_line = Line2D(digixdata, actualydata) #actual elif (provider == "default" and prediction_type == "proactive"): digix, digiy = CostModel.run(actualFileName) for i in range(0, len(digix)): new_vm_count = digiy[i] if i != 0: vm_change = int( math.ceil(digiy[i] - len([i for x in listVM if x.endTime == -1]))) else: vm_change = int( math.ceil(digiy[0] - len([i for x in listVM if x.endTime == -1]))) if vm_change > 0: vm_count += startVMs(listVM, vm_change, digix[i]) elif vm_change < 0: vm_count -= removeVMs(listVM, -vm_change, provider, digix[i]) modely_coord_actual.append(vm_count) scaleCSV.seek(0, 2) scaleCSV.write("%.3f,%.3f\n" % (i, vm_count * VM_parameter_unit)) digixdata = np.array(digix) digiydata = np.array(digiy) lineAllocate = Line2D(digixdata, digiydata) #requirement digi_line = Line2D(digixdata, modely_coord_actual) #actual elif (provider == "aws" and prediction_type == "proactive"): digix, digiy = CostModel.run(actualFileName) #print(digix) #print(digiy) for i in range(0, len(digix)): new_vm_count = digiy[i] if i != 0: vm_change = int( math.ceil(digiy[i] - len([i for x in listVM if x.endTime == -1]))) else: vm_change = int( math.ceil(digiy[0] - len([i for x in listVM if x.endTime == -1]))) if vm_change > 0: vm_count += startVMs(listVM, vm_change, digix[i]) elif vm_change < 0: vm_count -= removeVMs(listVM, -vm_change, provider, digix[i]) modely_coord_actual.append(vm_count) scaleCSV.seek(0, 2) scaleCSV.write("%.3f,%.3f\n" % (i, vm_count * VM_parameter_unit)) digixdata = np.array(digix) digiydata = np.array(digiy) lineAllocate = Line2D(digixdata, digiydata) #requirement digi_line = Line2D(digixdata, modely_coord_actual) #actual #for vm in listVM: #print("VM_id %3s: %5.1f - %5.1f = %5.1f%s" % (vm.id, vm.initTime, vm.endTime,(vm.endTime if vm.endTime > 0 else i) - vm.initTime, ("" if vm.endTime > 0 else " up"))) costValues = array.array('d') for k in drange(0, max(xdata), 1): cost = calculateAWSCost(listVM, k, vm_price_per_hour) costValues.append(cost) costCSV.seek(0, 2) costCSV.write("%.3f,%.3f\n" % (k, cost)) costydata = np.array(costValues) costxdata = np.arange(0, max(xdata), 1) cost_line = Line2D(costxdata, costydata) yvalues = np.array(yvalueset) #e = mse(digiydata, yvalues) start = max(min(line2d.get_xdata()), min(lineAllocate.get_xdata())) end = min(max(line2d.get_xdata()), max(lineAllocate.get_xdata())) #calculateViolation(predictLine=line2d, allocateline=lineAllocate, startTime= start , endTime= end) return rowdata, line2d, digi_line, cost_line